繁体   English   中英

Clang c++11 缩小

[英]Clang c++11 narrowing

如果我针对 clang 编译我的 gcc 代码,我会收到一个错误:

non-constant-expression cannot be narrowed from type 'int' to 'BYTE' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]

这个在线:

const BYTE pattern[4] = {0x00, 0x00, m_outTrackFormat == BS_RTF_MODE2_FORM1 ? 0x80 : 0x00, 0x00};

这里发生了什么变化?

列表初始化收缩转换定义如下:

列表初始化通过禁止以下内容来限制允许的隐式转换:

...

从整数或无作用域枚举类型到不能表示原始所有值的整数类型的转换,除非源是一个常量表达式,其值可以准确地存储在目标类型中

C++ 中没有 8 位整数文字 因此,与其他参数不同,由于您的三元运算符使用非常量变量,因此您有一个非常量int参数,需要将其转换为BYTE ,因此会出现编译错误。

顺便说一下,我可以在 clang 和 gcc 中重现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM