Я знаю, что смещение не может быть реализовано в C ++ сейчас (Cppreference Page).
Но после прочтения некоторых проблем C ++ CWS, моя проблема становится как «Dereference Null Pointer UB?».
Также, я думаю, они не будут Изменил реализацию Offsetof from & ((t*) null)-> member в C убью любую причину, но я не знаю, почему, может быть, потому что это UB? Но я не нашел термин «сказал &» (t*) null)-> member -UB в C. Для C ++, я думаю, что это UB, если это не стандартный тип макета.
В начале я подумал, что будет явно указанный термин, как «Dereference Null Pointer - это ub»
Однако, когда я в глубже, я обнаружил, что это сложнее, чем Я подумал.
После прочтения большого ответа статьи Stackoverflow я обнаружил, что ответ не унифицирован. , в некоторых сообщениях говорилось, что это не указано. Ответ в C ++ Access State Memports с использованием NULL Pointer.
Для этих сообщений говорится, что он не указан, они сказали, что он не был явно указан в стандарте.
Для этих постов. Сказали, что это UB, они сказали, что проблема не была включена в стандарт, так что это все еще UB. Кроме того, они дают термин о «если неверное значение было назначено указателю, поведение негального * не определено.».
Пример в Stackoverflow выше: < /p>
Код: Выделить всё
#include
class demo {
public:
static void fun()
{
std::cout fun();
std::cout a;
return 0;
}
< /code>
Примерно их причина сказать, что это четко определенное: < /p>
[list]
[*]E1->E2[*] Таким образом, если *d; является законным, тогда d-> fun ()
Подробнее здесь: https://stackoverflow.com/questions/768 ... -ub-in-c20
Мобильная версия