C ++构造函数隐式成员

时间:2017-03-06 23:30:14

标签: c++ constructor initialization

考虑以下类定义:

a()

如果我没记错的话,int将调用b的默认构造函数并将其初始化为0.如果我省略了构造函数,则不确定成员变量会发生什么。但是这个例子中myfun怎么样?对于我的gcc版本,它似乎也被设置为0,但这是定义的行为吗?

感谢您的回答。

2 个答案:

答案 0 :(得分:3)

b将被取消初始化,因此尝试使用它会导致UB(未定义的行为)。碰巧你的成员被gcc设置为零,但你不应该依赖它。

事实上,如果您在(-Wall -Wextra -Wpedantic)上编译所有警告,gcc吐出

warning: 'foo.Foo::b' is used uninitialized in this function

尝试执行类似

的操作时
cout << foo.b; // assuming b is public here

答案 1 :(得分:0)

根据标准,它是未定义的,并初始化为过去占用现在占用的内存块的任何值。但是,某些编译器会自动将值初始化为该类型的零值。

看看这个问题的接受答案:

What happens to a declared, uninitialized variable in C? Does it have a value?