9-4 使用列表初始化的注意事项
9.4 使用列表初始化的注意事项
9.4.1 隐式缩窄转换的问题
传统初始化的隐式缩窄转换会以截断的方式通过编译,但是初始化列表不会,其规则如下:
-
如果转换源是常量表达式,则其值应当在目标类型的范围以内,否则不能通过编译。
-
如果转换源不是常量表达式,则可能发生隐式缩窄转换,不能通过编译。
9.4 2 列表初始化的优先级问题
对于下面的两个变量创建,存在优先级问题:
std::vector<int> x1(5,5); //5个5 |
由于大括号即可以代表两个参数,又可以代表列表初始化的列表,因此优先级如下:
-
如果一个类同时满足列表初始化的构造函数,且其中一个是以
std::initializer_list
为参数,则编译器优先选择这个构造函数。
发布于