相关疑难解决方法(0)

char枚举中的值分配不正确

我正在使用枚举,并尝试从此页面重现一些示例.最初的例子按预期工作,但是我得到了一些有趣的结果,代码如下:

#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++ enums type-conversion implicit-conversion c++11

24
推荐指数
5
解决办法
3979
查看次数

C++ 11中弱类型枚举的基础类型

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)

c++ c++11

11
推荐指数
1
解决办法
1341
查看次数

标签 统计

c++ ×2

c++11 ×2

enums ×1

implicit-conversion ×1

type-conversion ×1