请参阅[class.base.init]/11中的此示例
struct A {
A() = default; // OK
A(int v) : v(v) { } // OK
const int& v = 42; // OK
};
A a1; // error: ill-formed binding of temporary to reference
A a2(1); // OK, unfortunately
Run Code Online (Sandbox Code Playgroud)
无论铛和g ++编译代码(铛一个警告),但我想明白为什么他们打印0的成员a1.v和a2.v?见演示.
Bar*_*rry 12
它们打印并不重要0.
因为a1,初始化是错误的开始.因为a2,你绑定了一个临时引用,所以你最终得到一个悬空引用.没有任何意义0- 它就是参考在那一点指向的垃圾记忆.一旦违反前提条件,程序就是未定义的行为.
未定义的行为未定义.没有理由期望打印的特定行为.例如,gcc 7打印32764而clang 4打印32765.为什么?为什么不.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |