Stackoverflow 精彩答案搬运之 Enum类型

Stackoverflow 精彩答案搬运计划。
原题链接:原题链接

How to use Enums in C++

Problem:

Suppose we have an enum like the following:
enum Days { Saturday,Sunday,Tuesday,Wednesday,Thursday,Friday };
I want to create an instance of this enum and initialize it with a proper value, so I do:

Days day = Days.Saturday;
Now I want to check my variable or instance with an existing enum value, so I do:

if(day == Days.Saturday)
{
std::cout<<"Ok its Saturday";

}
Which gives me a compilation error:

error: expected primary-expression before ‘.’ token
So to be clear, what is the difference between saying:

if(day == Days.Saturday) //causes compilation error
and

if(day == Saturday)
What do these two actually refer to, in that one is OK and one causes a compilation error?

 Answer:

This code is wrong:

enum Days { Saturday,Sunday,Tuesday,Wednesday,Thursday,Friday};
Days day = Days.Saturday;
if(day == Days.Saturday)

Because days is not a scope, nor object. It is a type. And Types themselves don’t have members. What you wrote is the equivalent to std::string.clear. std::string is a type, so you can’t use . on it. You use . on an instance of a class.

Unfortunately, enums are magical and so the analogy stops there. Because with a class, you can do std::string::clear to get a pointer to the member function, but in C++03, Days::Sunday is invalid. (Which is sad). This is because C++ is (somewhat) backwards compatable with C, and C had no namespaces, so enumerations had to be in the global namespace. So the syntax is simply:

enum Days { Saturday,Sunday,Tuesday,Wednesday,Thursday,Friday};
Days day = Saturday;
if(day == Saturday)
Tips:

Fortunately, your complaint has been addressedin C++11. Change enum to enum class and it gets its own scope; so Days::Sunday is not only valid, but is the only way to access Sunday. Happy days!

翻译就算了,因为真的太直白了,如果看不明白可以用划词翻译软件对照着看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值