加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否可以避免初始化列表中的static_cast?

发布时间:2020-12-16 03:38:44 所属栏目:百科 来源:网络整理
导读:在我的代码库中,我经常使用以下语法初始化数组或向量(如果是字节): uint16_t foo = 0xAB,bar = 0xCD// bytes = { 0xA,0xB,0xC,0xD }std::arrayuint8_t,4 bytes = {{ foo 8,foo 0x00FF,bar 8,bar 0x00FF}}; 我从clang得到以下错误: error: non-constant-exp
在我的代码库中,我经常使用以下语法初始化数组或向量(如果是字节):
uint16_t foo = 0xAB,bar = 0xCD

// bytes = { 0xA,0xB,0xC,0xD }
std::array<uint8_t,4> bytes = {{
    foo >> 8,foo & 0x00FF,bar >> 8,bar & 0x00FF
}};

我从clang得到以下错误:

error: non-constant-expression cannot
 be narrowed from type 'int' to 'value_type' (aka 'unsigned char') in initializer list [-Wc++11-narrowing]
                        foo >> 8,^~~~~~~~~~~~~

编译器建议我添加一个static_cast来消除错误.我知道演员会工作,但我想知道是否有可能避免演员表并保持语法优雅,因为它已经存在?

谢谢您的帮助.

解决方法

没有优雅的方法.

实际上你必须使用演员. foo>> 8& c.是int类型的表达式,您不能依赖缩小初始化列表中的转换.只有不合格的编译器才会避免使用您提供的代码发出诊断信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读