这个问题已经在这里有一个答案:
- 通过解除引用NULL指针分配参考 5个答案
下面的代码傻瓜周围nullptr
指针和参考:
#include <cstdio>
void printRefAddr(int &ref) {
printf("printAddr %p\n", &ref);
}
int main() {
int *ip = nullptr;
int &ir = *ip;
// 1. get address of nullptr reference
printf("ip=%p &ir=%p\n", ip, &ir);
// 2. dereference a nullptr pointer and pass it as reference
printRefAddr(*ip);
// 3. pass nullptr reference
printRefAddr(ir);
return 0;
}
问 :在C ++标准,有评论语句1..3有效的代码或未定义行为?
这是相同的或不同的与不同版本的C ++(旧的使用当然会0
文字而不是nullptr
关键字)?
奖金的问题:是否有已知的编译器/优化选项,这将真正使上面的代码做一些意想不到/崩溃? 例如,有一个标志的编译器,这会产生隐式断言nullptr
无处不在提到初始化,包括通过引用参数*ptr
?
一个例子输出为好奇,没有什么意外:
ip=(nil) &ir=(nil)
printAddr (nil)
printAddr (nil)