当我将 integer
传递给 std::initializer_list< size_t >
时,我想知道 clang 编译器的以下警告:
non-constant-expression cannot be narrowed from type 'int' to 'unsigned long' in initializer list
Why can int
be casted to a size_t
but an int
not be passed to an std::initializer_list< size_t >
, ie
int main()
{
size_t s_t = 0;
int i = 0;
std::initializer_list<size_t> i_l = { i }; // warning
s_t = i; // no warning
return 0;
}
原文由 abraham_hilbert 发布,翻译遵循 CC BY-SA 4.0 许可协议
您与 [dcl.init.list]/7 发生冲突
由于
i
不是常量表达式,因此这算作缩小转换,并且在初始化列表中不允许缩小转换。如果你要使用即使
0
是int
,它也不会缩小,因为编译器知道0
可以在每种类型中表示。