Depuis de-référencement nullptr
(NULL
) est un comportement non défini à la fois dans C
et C++
, je me demande si l'expression &(*ptr)
est valide si ptr est nullptr
(NULL
).C/C++ nullptr déréférencer
S'il s'agit également d'un comportement indéfini, comment fonctionne la macro OFFSETOF dans la réponse liée?
J'ai toujours pensé que ptr->field
est un raccourci pour (*ptr).field
Je pense que la réponse à ma question est similaire en C et C++.
Norme de projet C11 n1570: * 6.5.3.2 Opérateurs d'adresse et d'indirection 3 L'opérateur unaire & donne l'adresse de son opérande. Si l'opérande a le type '' type '', le résultat a le type '' pointer to type ''. Si l'opérande est le résultat d'un opérateur unaire *, ni cet opérateur ni l'opérateur & est évalué et le résultat est comme si les deux étaient omis, sauf que les contraintes sur les opérateurs s'appliquent toujours et le résultat n'est pas une valeur lvalue. * – EOF
Je l'ai marqué en tant que doublon, mais assurez-vous de lire la discussion sous la réponse C++, ainsi que [cette discussion] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active .html # 232), car ce n'est pas tout à fait si explicite dans la norme C++. – TartanLlama
Je doute que cela soit en double car OP demande "si déréférencement' nullptr' est UB comment offesetof fonctionne " – Slava