扫码关注官方订阅号
第一个有自动生成默认构造函数吗?为什么第二个不可以编译通过?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
第一个有自动生成默认构造函数吗?
有,当一个类内没有任何用户定义的构造函数的时候,编译器会生成默认构造函数。参见 Default constructors。
为什么第二个不可以编译通过?
如果一个类想要使用大括号列表的方式,进行成员初始化,那么这个类必须满足 aggregate class 的条件。而在 aggregate class 的条件中,有一条是
类不包含任何类内初始化器(in-class initializer)。
在题主的第二个例子类的定义中,成员a和b都使用了 in-class initializer,所以不是 aggregate class,所以不能使用
a
b
NoDefault y = {2, 2};
的方式初始化。
注:根据 aggregate initialization 所述,这一条件在C++17中将被删去。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
有,当一个类内没有任何用户定义的构造函数的时候,编译器会生成默认构造函数。参见 Default constructors。
如果一个类想要使用大括号列表的方式,进行成员初始化,那么这个类必须满足 aggregate class 的条件。而在 aggregate class 的条件中,有一条是
在题主的第二个例子类的定义中,成员
a
和b
都使用了 in-class initializer,所以不是 aggregate class,所以不能使用的方式初始化。
注:根据 aggregate initialization 所述,这一条件在C++17中将被删去。