【发布时间】:2016-12-23 00:00:29
【问题描述】:
移植一些我发现的代码
unsigned char uc = unsigned char(c);
被 MSVC 接受但被 GCC 拒绝。这个语法正确吗?
标准说
简单类型说明符 (7.1.7.2) ... 后跟括号 可选的表达式列表或由一个花括号初始化列表(初始化器) 在给定初始化器的情况下构造指定类型的值
这是否意味着 MS 是对的? unsigned char 是“简单类型说明符”吗?
【问题讨论】:
-
什么是(变量?)
c? -
看起来像一个 MSVC 扩展。根据cppreference,一个简单的类型说明符是
char或unsgined(这里推导出int)。规则列表没有描述unsigned char可以被视为一个的方式。但是你可以typedef它,并且 that 将被视为一个简单的类型说明符。 -
@StoryTeller 好电话。也许MSVS使用表9而不是[dcl.type.simple]中的第1段
-
@NathanOliver,一定是它!但是表格和段落之间的差异有点令人讨厌......尤其是考虑到表格的描述。
-
@songyuanyao 啊哈!我没有阅读第 2 段。尽管 Table 9 — simple-type-specifiers 和它们指定的类型只是阅读了表格的标题,这让我感到模棱两可。
标签: c++ gcc visual-c++ type-conversion language-lawyer