Рассмотрим следующий код:Является ли `(T *) 0 - (T *) 0` корректным для 0?
#include <iostream>
int main()
{
int *a = 0, *b = 0;
std::cout << (a - b);
}
На ideone этот код печатает 0, как и следовало ожидать, но я не уверен, если это хорошо определено поведение или нет.
Интересно, хорошо ли определено (T*)0 - (T*)0
? Гарантировано, что оно равно 0
?
Это то же самое на C и C++? Если нет, то каковы различия?
(Конечно, T
не void
ни std::nullptr_t
, потому что арифметика указателей не работает для них.)
Более старый вопрос явно ограничен старыми версиями C и C++. Этот вопрос привлекал ответы на более современные версии, поэтому я голосую за возобновление. –
@AdrianMcCarthy Не уверен, что я следую. Хотя он был помечен более старыми версиями в дополнение к общим тегам C++/c, верхний проголосовавший ответ цитирует то, что похоже на тот же источник, что и единственный ответ на этот вопрос для версий стандарта C++ 03 и C++ 11 – Foon