使用大括号初始值设定项的默认参数
Default argument using curly braces initializer
我有这段代码,似乎运行良好:
class foo{/* some member variables and functions*/};
void do_somthing(foo x={}){}
int main(){
do_somthing();
}
我曾经使用 void do_somthing(foo x=foo()){}
来默认x
参数,但我在某些书籍或在线示例中={}
看到这种方式(不记得了)。完全可以使用它吗?这两种方法有什么区别吗?
foo x=foo()
是复制初始化,
从另一个对象初始化一个对象
foo()
是值初始化。
这是使用空初始值设定项构造变量时执行的初始化。
foo x={}
是聚合初始化。
从大括号初始化列表初始化聚合
如果初始值设定项子句的数量小于 成员和基(自 C++17 起)或初始值设定项列表完全 为空,其余成员和碱基(自 C++17 起)初始化 通过其默认初始值设定项(如果在类定义中提供), 否则(自 C++14 起)通过空列表执行 值初始化。
因此,在这种情况下,结果是相同的(两者都是值初始化的)。
在这种情况下,值初始化的效果是:
如果 T 是具有既非用户提供也不删除的默认构造函数的类类型(即,它可能是具有隐式定义或默认默认构造函数的类),则对象为零初始化
最后,在这种情况下,零初始化的效果是:
如果 T 是标量类型,则对象的初始值是积分 常量零显式转换为 T。
如果 T 是非联合类类型,则所有基类和非静态数据 成员初始化为零,所有填充初始化为零 位。构造函数(如果有)将被忽略。
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本