![]() |
1
4
因为标准规定, narrowing conversions limit 仅用于列表初始化(因为C++ 11)。
对于其他初始化方法(使用括号或等号),不应用(添加)缩小转换限制规则;因为这可能会破坏许多遗留代码。 |
![]() |
2
2
两者的区别在于列表初始化中不允许进行收缩转换。在其他形式的初始化中,它们是允许的。 这里经常让人困惑的是,当某些东西不被允许时,并不意味着编译器必须拒绝编译代码。要求编译器必须“发出诊断”,警告是有效的诊断形式。 所以编译器需要对列表初始化中的收缩转换发出诊断,这就是您看到的。除此之外,正如其他人所说,您可以提高警告级别,以获得有关在其他上下文中缩小转换范围的警告。但是不需要列表外的初始化诊断,而且它们通常比有用更烦人,因此默认情况下不打开。 |