Sam*_*rsa 7 c++ constructor default-constructor
在我正在阅读的这本书中,我遇到了这个:
一个类不需要构造函数.如果对象不需要初始化,则不需要默认构造函数.
我是否正确地从上面推断出编译器在某些情况下不会为类/结构生成默认构造函数?如果是,那些案件是什么?我会冒险说POD可能就是其中之一.还有别的吗?
编辑:我已经更改了标题,因为原始标题给出的含义是我询问何时是未定义的默认构造函数而不是询问何时类没有构造函数.
一个类不需要构造函数.如果对象不需要初始化,则不需要默认构造函数.
我认为作者正在谈论这种情况:
some_type some_function () {
POD_type this_is_intentionally_uninitialized;
...
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,不会调用构造函数,句点.一旦编写构造函数,就没有POD类,所以现在将调用构造函数.
让一个包含随机,未初始化数据的对象运行是好还是坏是一个完全不同的问题.
始终声明默认构造函数.但它并不总是被定义.只有在使用它时,编译器(或您)才能定义它.例子:
struct A { std::string str; };
// not yet defined
struct B : A { };
// not yet defined
B b;
// Now B::B and A::A are defined
Run Code Online (Sandbox Code Playgroud)
请注意,这具有直接的实际后果
struct A { private: A(); };
struct B : A { };
// valid, as B::B is not yet defined
B b;
// now invalid, because B::B is defined and tries to call a
// private base class constructor
Run Code Online (Sandbox Code Playgroud)