考虑:
int* ptr = (int*)0xDEADBEEF;
cout << (void*)&*ptr;
Run Code Online (Sandbox Code Playgroud)
*如果它与一个立即使用&并且假设没有超载op&/ 在场,那么它是多么违法op*?
(这对解决过去的数组元素有一个特殊的影响&myArray[n],这个表达式明确相当于&*(myArray+n).这个Q&A解决了更广泛的情况,但我不觉得它真的满足了上面的问题.)
Naw*_*waz 18
根据规范,解除引用无效指针本身的效果会产生未定义的行为.解除引用它后你做了什么并不重要.
chi*_*ill 16
假设变量`ptr'不包含指向有效对象的指针,如果程序需要对表达式`*ptr'进行左值到右值的转换,则会发生未定义的行为,如[conv.lval]中所述(ISO/IEC 14882:2011,第82页,4.1 [#1]).
在评估`&*ptr'期间,根据[expr.unary.op](ISO/IEC 14882:2011,第109页,5.3),程序不需要对子表达式`*ptr'进行左值到右值的转换. .1 [#3])
因此,这是合法的.