微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – POD成员默认初始化没有大括号

给定代码
struct Test {
    int a = 1;
    int b = 2;
};

Test test1;
Test test2{};

对于test2,我确定,test2.a == 1和test2.b == 2.对于test1(没有{}),它是否保证(或不相同)?

解决方法

这条线
Test test1;

等效于使用认构造函数的初始化,在没有手写的具有显式初始化列表且没有test()= deleted的情况下;最终会将两个成员设置为指定的初始值1和2.

认构造函数”是可以不带参数调用的构造函数,这与上述语句完全相同.

您可以阅读standard认构造函数的规则 – 转到§12.1第4节:

A default constructor for a class X is a constructor of class X that can be called without an argument…

在第5节中进一步说明:

A default constructor that is defaulted and not defined as deleted is implicitly defined when it is odrused (3.2) to create an object of its class type (1.8)…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐