【发布时间】:2015-09-11 17:31:52
【问题描述】:
假设我有关注struct:
struct A
{
unsigned int a : 1;
unsigned int b : 1;
};
我感兴趣的是a + b 的表达类型。虽然从技术上讲,位字段的“类型”的大小小于int,所以可能应该发生整体提升,然后结果是int,就像它恰好在 gcc 和 clang 中一样。
但是由于不可能提取位域本身的确切类型并且它总是被推断为它的“大”类型(即在这种情况下为unsigned int),所以应该进行整体提升是否正确?因为我们实际上不能谈论位域的确切类型及其大小,除非它们被推断为unsigned int,在这种情况下不应该发生积分提升。
(我的问题再次源于 MSVC 碰巧认为unsigned int 是此类表达式的类型)
【问题讨论】:
-
Visual Studio 的哪个版本,添加该标签可能是有意义的,以防其他人有同样的问题
-
@ShafikYaghmour 这是最新的,但我添加了它以防万一。
标签: c++ visual-studio-2015 language-lawyer bit-fields integer-promotion