【发布时间】:2013-10-17 10:01:16
【问题描述】:
在 gcc-4.5 下,打印 0,在 gcc-4.6 下,打印 1。
#include <iostream>
enum VenueId: char {};
int
main (int argc, char ** argv)
{
VenueId v = (VenueId)'P';
std::cout << (v=='P') << std::endl;
return 0;
}
【问题讨论】:
-
我猜这样的转换是未定义的,但我找不到合适的标准
:-( -
定义明确。 GCC 4.5 有问题。
-
在 Ubuntu 12.04 中使用最新版本的 g++-4.5,这显然已得到修复,因为它也打印出 1。另外生成的程序集(Intel风格)无非是
mov BYTE PTR [rbp-0x1],0x50,对应VenueId v = (VenueId)'P';和cmp BYTE PTR [rbp-0x1],0x50,对应比较,如你所见,0x50 == 0x50。 -
关于 C++11 特性,我的经验法则是:gcc 4.5 = pre-alpha, 4.6 = alpha, 4.7 = beta, 4.8 = release