C 构造函数隐式成员
C++ Constructor implicit members
考虑以下类定义:
class Foo {
private:
int a;
int b;
public:
Foo() :
a()
{}
};
如果我没记错的话,a()
将调用int
的默认构造函数并初始化为0。如果我忽略了构造函数,则不确定会员变量会发生什么。但是在此示例中b
呢?对于我的GCC版本,它似乎也设置为0,但这是定义的行为吗?
感谢您的回答。
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
根据标准,它是未定义的,并将其初始化为用于占据其现在占据的内存块的任何值。但是,某些人会自动将值初始化为该类型的零值。
查看此问题的接受答案:
c中已声明的非初始化变量会发生什么?它有一个值吗?
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 继承:构造函数,初始化C++11中基类的类C数组成员
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- constexpr构造函数需要常量成员函数时出现问题
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 在成员构造函数之后调用基类构造函数
- C++:如何在对象构造过程中调用初始值设定项列表之外的成员构造函数
- 用作成员构造函数参数的函数的求值顺序
- 从成员构造函数(Brace Initializer vs Initializer列表)抛出异常
- 不正确的成员构造函数定义
- 我可以基于模板参数将某个值传递给成员构造函数吗
- 在类定义中调用成员构造函数
- 使用已删除的副本构造函数和初始值设定项列表重载调用类定义中的成员构造函数
- 正在从成员构造函数调用虚拟函数
- c++初始化类成员构造函数
- c++模板限制成员构造函数