【发布时间】:2021-12-18 13:26:10
【问题描述】:
考虑这个示例程序:
#include <iostream>
typedef enum { A, B, C } MyEnum;
struct S
{
S(int) { std::cout << "int" << std::endl; }
S(MyEnum) { std::cout << "MyEnum" << std::endl; }
};
S f()
{
return A;
}
int main()
{
S const s = f();
}
使用 clang 和 gcc 编译,这会生成一个在运行时打印“MyEnum”的可执行文件。 C++ 标准是否保证这种行为?
【问题讨论】:
-
让事情变得更有趣:godbolt.org/z/exf6bY7de
-
这并没有解决问题,但在 C++ 中,您不必跳
typedef enum ... MyEnum;舞蹈。enum MyEnum ...;工作得很好。typedef是 C 主义; C++ 处理类型名称的方式不同。
标签: c++ implicit-conversion overload-resolution