关于C++枚举的简单问题

#include<iostream>enumSex{Male,Female};intmain(){usingstd::cout;usingstd::endl;Sexboy... #include <iostream>
enum Sex
{
Male,
Female
};
int main()
{
using std::cout;
using std::endl;
Sex boy = Male;
Sex girl = Sex::Female; //关键是这一句
cout << boy << endl << girl << endl;
return 0;
}

从教材上看到的C++枚举变量赋值都是类似Sex boy = Male, 而Sex girl = Sex::Female这种是类似C#中的用法。
上述程序在VS2012中编译通过,但在VC6.0中编译错误:
error C2039: 'Female' : is not a member of 'Sex'

所以我想问下,类似Sex girl = Sex::Female这种用法是高版本VS提供的扩展,还是说已经归入到新的C++标准中了,即Sex girl = Sex::Female是不是依赖于特定的编译器才能编译通过。
希望回答者给出相关正式的说明或者证明。多谢。
展开
 我来答
reverse_walker
2013-08-27 · TA获得超过590个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:473万
展开全部
非标准的扩展使用, 也就是你要这么写就无法移植.
在VS2008上尽管可以通过编译, 但是给出警告C4482, 提示使用了非标准的扩展.

::是作用域限定符. 而枚举的中的值是属于外围作用域的成员.
所以Female等于::Female,是全局作用域里的成员,
Sex::Female有悖这种概念.因为这样看上去Sex更像是一个类或者是命名空间.

struct S {
enum E { a };
};

int i = S::E::a; // C4482
int j = S::a; // OK
百度网友8dda61a
2013-08-26 · TA获得超过162个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:180万
展开全部
早期的VC版本不支持::运算符获取 枚举值。
VS2012的C++版本为9.0

早期枚举类似自定义有限数组,通过数字获取对应的值,或通过比较值,获得对应的序号。
定义:
enum{
male,female
}Sex;
取值方式 为
string str = (Sex)0 //male
默认起始序号为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式