我是 C++ 的新手,我想知道是否有人可以帮助我理解为什么
enum difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = EASY
和
enum shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
用绿色下划线?它说它更喜欢枚举类,但是当我将其更改为枚举类时
enum class difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = EASY;
enum class shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
EASY 变成红色下划线并且 myShipCost 用绿色下划线,BOMBER_COST 用红色下划线,CRUISER_COST 用红色下划线
const int ALIEN_POINTS = 150;
int aliensKilled = 10;
int score = aliensKilled * ALIEN_POINTS;
cout << "score: " << score << endl;
enum difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDifficulty = EASY;
enum shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = BOMBER_COST;
cout << "\nTo upgrade my ship to a cruiser will cost "
<< (CRUISER_COST - myShipCost) << " Resource Points.\n";
system("pause");
return 0;
答案 0 :(得分:4)
enum class difficulty { NOVICE, EASY, NORMAL, HARD, UNBEATABLE };
difficulty myDiffiuclty = difficulty::EASY;
enum class shipCost { FIGHTER_COST = 25, BOMBER_COST, CRUISER_COST = 50 };
shipCost myShipCost = shipCost::BOMBER_COST;
使用 enum class
,删除了到/从整数的隐式转换,并且您必须限定其中的常量范围。
这被认为是一种改进。将其显式转换回整数仍然有效,但并非偶然发生。
std::cout << "\nTo upgrade my ship to a cruiser will cost "
<< (static_cast<int>(shipCost::CRUISER_COST) - static_cast<int>(myShipCost)) <<
" Resource Points.\n";
system("pause");
return 0;
使用 enum class
后,您应该重命名它们:
enum class difficulty { novice, easy, normal, hard, unbeatable };
difficulty myDiffiuclty = difficulty::easy;
enum class shipCost { fighter =25, bomber=30, cruiser = 50 };
shipCost myShipCost = shipCost::bomber;
由于名称的 ship
部分现在在 enum
中,因此无需在常量中重复。同样,因为名称是有范围的,所以您不必SHOUT
它们。
但是请注意,如果您只是使用它来创建常量而不打算创建类型,请考虑使用以下内容:
namespace ship {
namespace cost {
constexpr int fighter = 25;
constexpr int bomber = 30;
constexpr int cruiser = 50;
}
}
现在我们将 ship::cost::fighter
作为编译时计算的 int
,而不是作为 enum class
。