POD 类对象初始化是否需要构造函数
does POD class object initialization require constructor?
我阅读了以下链接:-
使用和不带括号初始化的对象
默认构造函数的类型
比较黑白值,零和默认灌输
我有一些问题想澄清一下。
1)给定一个POD类,说:-
class A{
int val;
};
如果我创建一个类型 A 的对象。
一个 obj;//这个调用会隐式定义编译器提供的构造函数吗?
现在就我对这种情况中的理解而言,构造函数 called.is 不正确?
new A();//value-initialize A,因为它是一个 POD,所以是零初始化。现在在这种情况下,编译器将隐式定义的构造函数提供?构造函数是否有任何角色用于零初始化对象?
如果我的理解是错误的,你能给我一个例子,其中隐式定义的定义构造函数根本没有被调用。
提前谢谢你。
1) 正确。 obj.val
未初始化。
2)这是一个函数声明,而不是初始化:
A obj(); // function obj() returning an A
如果你这样做,
A obj{}; //C++11
A obj = A(); // C++03 and C++11
obj
将被值初始化,obj.val
也是如此。这反过来意味着obj.val
初始化为零(值初始化意味着内置类型的零初始化)。
A obj;
它调用默认构造函数(甚至不用于优化),但是默认构造函数不会初始化它。
A obj();
它是一个函数声明。没有参数并返回A
.
A obj{};
相反,您可以使用上述将val
设置为零的代码。
相关文章:
- 无论如何,我可以确定构造函数是否存在吗?
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 构造函数是否有一种现代C++方法来了解其'container'类?
- 移动构造函数是否C++过时?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 如何检测构造函数是否与抛出的析构函数无关
- 删除复制构造函数是否也会删除默认的复制/移动运算符?
- 构造函数是否unique_ptr初始化原始指针unique_ptr析构函数是否也删除关联的原始指针?
- 构造函数是否应该具有应用商店屏障?
- 将数据成员的指针传递给基类构造函数是否安全?
- 访问控制对于已删除的构造函数是否重要?
- 是否可以使用 EXPECT_CALL 来验证模拟对象的构造函数是否在某些时候调用成员函数?
- 让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
- 移动构造函数是否使shared_from_this无效
- 默认构造函数是否表示C 中的通用类型的零
- 没有参数的默认构造函数是否总是初始化变量?
- constexpr移动构造函数是否有意义
- 默认默认构造函数是否将变量初始化为零
- std::initializer_list私有构造函数是否从编译器那里得到非常特殊的处理