【发布时间】:2016-02-21 12:31:01
【问题描述】:
我在玩枚举并试图重现一些示例 from this 页面。最初的示例按预期工作,但是我通过以下代码得到了一些有趣的结果:
#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;
}
输出是:
2
50
我希望这两个结果是相同的,但 num::two 似乎打印了一些其他值。这个值也不会改变(50),所以我认为这不是一个随机/垃圾值,并且正在进行某种我不明白的 char/int 解析?这是the ideone link。
我知道我可以通过像这样分配zero = 0 来使其工作,而无需单引号并且它可以工作。但是,我想知道幕后发生了什么,以及如何控制可以通过单引号分配打印的非个位数值。
【问题讨论】:
-
@Drop 我也假设了这一点,但是为什么
const char two = '2';会按预期工作?两者都使用单引号赋值,这使得它更加混乱。 -
这与分配有什么关系?您的标题应该要求解释输出的原因。
-
@JDługosz 分配,因为相同的形式分配,例如
one = '1'和char c = '1'产生不同的输出,并且在撰写此问题时,我忽略了运算符重载部分。如果我知道答案,我为什么会在这里发布? -
实际上,
=的这些用法都不是赋值。由于该问题比您最初预期的更普遍,因此您可以编辑标题。
标签: c++ c++11 enums type-conversion implicit-conversion