c ++枚举类未正确显示

时间:2017-09-07 08:35:44

标签: c++ enums

以下是代码:

#include "stdafx.h"
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
#include <iomanip>


enum Suit : long {Heart, Club, Spade, Diamond};
enum class Color : char {Red = '*', Blue, Yellow, Green};
int main(int argc, wchar_t* argv[])
{
    using namespace std;
    auto suit = Suit::Club; 
    auto color = Color::Yellow;
    cout << setw(37) << left << "Suit value: " << setw(5) << right << suit << endl;
    cout << setw(37) << left << "Suit value +10: " << setw(5) << right << suit + 10 << endl;
    cout << setw(37) << left << "Color value: " << setw(5) << right << static_cast< char >(color) << endl;
    cout << setw(37) << left << "Color value +10: " << setw(5) << right << static_cast< int >(color) << endl;

    wchar_t x;
    wcin >> x;
    return 0;
}

在vs2017中运行结果:

Suit value:                              1
Suit value +10:                         11
Color value:                             ,
Color value +10:                        44

所以char *打印成逗号,为什么?

2 个答案:

答案 0 :(得分:3)

Red'*'Yellow'*' + 2,即','

更具体地说,42是'*'的ASCII值,44是','的ASCII值,RedYellow相差2。

答案 1 :(得分:0)

Ascii Code Table

如果你知道enum如何运作,enum的变量从最后一个值获得+1值。对于前 -

enum {
      sunday = 0, monday, tueday, ... , saturday 
}

如果您访问monday的值,它将1。 正如你给出的red = '*'。因此,对于编译器,enum将会是这样的。

enum {
      red = '*',
      blue = '+',
      yellow = ','
} 

所以现在你知道了。