Már*_*ldi 11 c++ c++11 list-initialization
列表初始化({...}语法)不允许缩小转换.例如,尝试列表初始化一个int iwith会3.14f产生编译错误,因为从浮点值到整数的转换正在缩小:
<source>:11:32: error: narrowing conversion of '3.1400001e+0f' from 'float' to 'int' inside { } [-Wnarrowing]
int i{3.14f};
^
Run Code Online (Sandbox Code Playgroud)
随着中说,为什么它可以构造一个float f与3.14,这是类型的double?(从转换double到float被认为是缩小的.)执行以下操作:
float f{3.14};
Run Code Online (Sandbox Code Playgroud)
不保留编译错误.
GMa*_*ckG 13
在被视为缩小转换的列表中,适合目标类型的常量表达式是一个例外.因此,虽然通常double to float正在缩小,但当你的double实际上是一个文字时,这是允许的.
http://coliru.stacked-crooked.com/a/6949f04fa4a8df17
从我手头的草稿(我认为接近C++ 14):
8.5.4列表初始化
(7.2)缩小转换是一种隐式转换......
从long double到double或float,或从double到float,除非source是常量表达式和转换后的实际值在可以表示的值范围内(即使它不能准确表示),
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |