【发布时间】:2018-06-06 10:09:37
【问题描述】:
我在编程的时候发现了一些有趣的事情:
enum class Foo {
FOO_THING,
FOO_TOO
};
int main() {
Foo foo{1}; // It is OK
Foo foo2(1); // It is an invalid
}
你能告诉我,为什么foo{1} 对编译器是可以的,为什么foo2(1) 是无效的?
编译器 GCC (g++ (Ubuntu 7.3.0-21ubuntu1~16.04) 7.3.0) 说:
$ g++ -Wall -std=c++17 foo.cpp
error: cannot convert ‘int’ to ‘Foo’ in initialization
Foo foo2(1);
我真的很想了解底层机制。 :)))
编辑:可能是一些编译器错误...
【问题讨论】:
-
作为记录,VS2015 两者都出错。
-
我添加一个关于编译器版本的注释
-
显然,这是从 C++17 开始支持的。但我不知道哪个更改负责启用它。但是,
Foo foo2(1)失败,因为它是一个构造函数调用,并且枚举类没有采用 int 的构造函数。
标签: c++ enums initialization c++17