【发布时间】:2017-11-16 21:36:35
【问题描述】:
我无法使用 GCC 或 Clang 编译下面的代码。尝试了 C++11 和 C++14。
我的问题:
有什么合乎逻辑的理由不实施吗?我自己,我想不出任何...请参阅下面的解决方法。
enum class fruit {
APPLES,
ORANGES,
STRAWBERRIES
};
struct Area {float x, y, width, height;};
const Area test[] = {
[fruit::APPLES] = {1,2,3,4},
[fruit::ORANGES] = {2,2,3,4},
[fruit::STRAWBERRIES] = {3,2,3,4}
};
这虽然编译得很好:
namespace fruit { // instead of enum class, this works
enum {
APPLES,
ORANGES,
STRAWBERRIES
};
}
struct Area {float x, y, width, height;};
const Area test[] = {
[fruit::APPLES] = {1,2,3,4},
[fruit::ORANGES] = {2,2,3,4},
[fruit::STRAWBERRIES] = {3,2,3,4}
};
【问题讨论】:
-
enum class不能隐式转换为整数值,这正是enum class的用途。 -
正如@Jack 所说,它故意不可隐式转换,但您可以显式转换它。
-
您的“编译良好”的版本也不是有效的 C++。
-
@juanchopanza 需要解释一下吗?
-
指定初始值设定项是 GCC 在编译 C++ 代码时作为扩展提供的 C 功能。它们不是 C++ 的一部分。 Clang 提供了一个类似的扩展以及一个警告,MSVC 不支持它们。
标签: c++ arrays initialization enumeration