2017-03-06 100 views
0

考虑以下的类定义:C++构造函数隐式成员

class Foo {  
private: 
    int a; 
    int b; 

public: 
    Foo() : 
     a() 
    {} 
}; 

如果我没有记错,a()将调用int默认的构造函数,并把它初始化为0。如果我离开了构造函数,它的不确定会发生什么到成员变量。但在这个例子中b呢?对于我的gcc版本,它似乎也设置为0,但是是否定义了行为?

感谢您的回答。

回答

3

b将被初始化,所以试图使用它会导致UB(未定义的行为)。只是碰巧你的成员被gcc设置为零,但你不应该依赖这个。

事实上,如果你对所有的警告(-Wall -Wextra -Wpedantic)编译,GCC试图做类似

cout << foo.b; // assuming b is public here 
相关问题