【发布时间】:2014-09-05 09:22:17
【问题描述】:
为了提供一点背景知识(与后面的问题无关),在 C++11 中我注意到了一个缩小范围的问题:
int foo[] = { 0xFFFFFFFF };
因为0xFFFFFFFF 是unsigned int,所以编译失败(缩小转换)。但是,我见过0xFF 签名的情况。
我查看了整数提升规则,但这主要是在左值而不是右值/常量的上下文中。编译器如何确定常量的类型(没有文字后缀)?是否有显示此规则的文档或漂亮的小表格/“备忘单”?我什至不确定这叫什么,否则我会尝试自己在 C++11 标准中找到它。
提前致谢。
【问题讨论】:
-
它是签名优先级所需的最窄类型,至少为
int。 -
我在回答中添加了一些额外的细节,您可能会觉得它们有用/有趣。