9-4 使用列表初始化的注意事项

9.4 使用列表初始化的注意事项

9.4.1 隐式缩窄转换的问题

​ 传统初始化的隐式缩窄转换会以截断的方式通过编译,但是初始化列表不会,其规则如下:

  • 如果转换源是常量表达式,则其值应当在目标类型的范围以内,否则不能通过编译。

  • 如果转换源不是常量表达式,则可能发生隐式缩窄转换,不能通过编译。

9.4 2 列表初始化的优先级问题

​ 对于下面的两个变量创建,存在优先级问题:

std::vector<int> x1(5,5);		//5个5
std::vector<int> x1{5,5}; //两个5

​ 由于大括号即可以代表两个参数,又可以代表列表初始化的列表,因此优先级如下:

  • 如果一个类同时满足列表初始化的构造函数,且其中一个是以std::initializer_list为参数,则编译器优先选择这个构造函数。