我正在使用枚举,并尝试从此页面重现一些示例.最初的例子按预期工作,但是我得到了一些有趣的结果,代码如下:
#include <iostream>
enum num : char {
zero = '0',
one = '1',
two = '2',
three = '3',
four = '4',
five = '5',
six = '6'
};
int main()
{
const char two = '2';
std::cout << two << std::endl;
std::cout << num::two;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
2
50
我预计两种结果都是相同的,但num::two似乎打印出其他一些值.此值也不会改变(50),所以我假设这不是随机/垃圾值,并且有一些char/int解析正在完成,我不明白?这是ideone链接.
我知道我可以通过这样分配来实现它zero = 0,没有单引号并且它有效.但是,我想知道幕后发生了什么,我怎么能控制通过单引号分配可以打印的非单位数值.
C++ 11引入了强类型枚举,具有语法enum class.这些与整数类型不兼容,需要显式强制转换才能获取其数值.C++ 11还引入了为表单中的弱类型枚举指定存储类的功能enum name : type {}.这在这里很好.
但看起来即使弱类型的枚举具有给定的存储类,其项目的类型仍然是int.我尝试使用Visual Studio 2012,11月CTP发布.请考虑以下代码:
enum charEnum : char { A = 'A' };
enum longEnum : long long { Tera = 1000000000000 };
void fct(char val) {}
void fct(int val) {}
void fct(long long val) {}
int main()
{
static_assert(sizeof(A) == sizeof(char), "check charEnum size");
static_assert(sizeof(Tera) == sizeof(long long), "check longEnum size");
fct('A'); // calls fct(char)
fct(1); // calls fct(int)
fct(2ll); // calls fct(long long)
fct(A); // …Run Code Online (Sandbox Code Playgroud)