Wak*_*zil 9 c++ default-constructor c++11
有人可以指出标准中的哪个子句支持在Coliru中获得的以下行为,对于该片段:
#include <iostream>
class A
{
int i;
float x;
public:
A() : i(10) {}
A(int i) : i(i) {}
int GetI() { return i; }
float GetF() { return x; }
};
int main()
{
A a;
A b(1);
A x{};
A y{1};
std::cout << a.GetI() << '\n';
std::cout << a.GetF() << '\n';
std::cout << b.GetI() << '\n';
std::cout << b.GetF() << '\n';
std::cout << x.GetI() << '\n';
std::cout << x.GetF() << '\n';
std::cout << y.GetI() << '\n';
std::cout << y.GetF() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
代码打印:
10
0 < - 不应该是未知的?
1
0 < - 同上
10
0
1
0
编辑:
本段来自TCPL第4版,第490页:
为此,规则并不像我们想要的那样干净.对于静态分配的对象(第6.4.2节),规则与使用{}完全相同,因此alpha的值为{"","",0}.但是,对于局部变量和自由存储对象,默认初始化仅针对类类型的成员进行,而内置类型的成员未初始化,因此beta的值为{"","",unknown}.
Stroustrup先生对未定义的行为没有任何说明.
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |