考虑以下类定义:
a()
如果我没记错的话,int
将调用b
的默认构造函数并将其初始化为0.如果我省略了构造函数,则不确定成员变量会发生什么。但是这个例子中myfun
怎么样?对于我的gcc版本,它似乎也被设置为0,但这是定义的行为吗?
感谢您的回答。
答案 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?