C++ ";“枚举”;在using语句中-它有区别吗?
针对语言律师/挑剔者的“理智检查”问题: 在这段代码中:C++ ";“枚举”;在using语句中-它有区别吗?,c++,visual-c++,enums,language-lawyer,compiler-bug,C++,Visual C++,Enums,Language Lawyer,Compiler Bug,针对语言律师/挑剔者的“理智检查”问题: 在这段代码中: enum my_enum { AValue1, AValue2 }; using alias_1 = enum my_enum; using alias_2 = my_enum; alias_1和alias_2之间有什么区别吗?也就是说,编译器会以不同的方式对待它们吗?我的理解是答案是“否”,但我的一个用户在使用MSVC 16.8+CUDA时,在第一类语句而不是第二类语句中遇到了不同的编译器行为。类似于的操作无法将参数1从'my_en
enum my_enum { AValue1, AValue2 };
using alias_1 = enum my_enum;
using alias_2 = my_enum;
alias_1
和alias_2
之间有什么区别吗?也就是说,编译器会以不同的方式对待它们吗?我的理解是答案是“否”,但我的一个用户在使用MSVC 16.8+CUDA时,在第一类语句而不是第二类语句中遇到了不同的编译器行为。类似于的操作无法将参数1从'my_enum'转换为'alias_1'
注:
- 像
或姓名隐藏这样的病理学与答案中的地址相关,我想,但我最感兴趣的是“非病理”情况#define enum
- 如果C++11很重要,请特别询问
- 我发现很难创建一个MWE,因为我自己没有那个编译器,也不经常运行Windows
enum
(如中所示),非类型名称将被排除在名称查找之外
(强调矿山)
详细说明的类型说明符中的类名或枚举名可以是简单标识符,也可以是简单标识符。根据名称的外观,使用或查找名称但无论哪种情况,都不考虑非类型名称
例如
我暗示没有隐瞒,但这是一个有效的答案。除了隐藏之外,还有什么吗?@einpoklum使用别名_2=my_enum在
中隐藏名称代码>。使用enum
,非类型名称被排除,名称隐藏问题就消失了。除此之外,我想不出还有什么不同。是的,我理解。我应该澄清这不是我追求的关键。因此,您的答案很好,但请参见编辑。
enum my_enum { AValue1, AValue2 };
int main()
{
int my_enum;
using alias_1 = enum my_enum; // works; refers to the enum my_enum
//using alias_2 = my_enum; // doesn't work; the non-type name my_enum in main() is found
}