【问题标题】:C++ enum keyword in function parameters [duplicate]函数参数中的C ++枚举关键字[重复]
【发布时间】:2021-11-15 10:14:08
【问题描述】:

在函数参数中使用enum 关键字有什么意义?没有它,它似乎做同样的事情。

enum myEnum{
  A, B, C
};

void x(myEnum e){}

void y(enum myEnum e){}

这两者有区别吗?

【问题讨论】:

  • 可能是 C 兼容性。 C 对何时将标识符视为类型有不同的规则,并且往往要求您更明确地使用 enumstruct 关键字。因此,例如在 C x doesn't compile 中,您实际上需要编写 y 版本。 C++ 保持与 C 语法的兼容性并没有什么坏处。

标签: c++ scope declaration enumeration name-hiding


【解决方案1】:

在这个函数声明中

void x(myEnum e){}

枚举 myEnum 应已声明且未隐藏。

在这个函数声明中

void y(enum myEnum e){}

这里使用了所谓的详细类型名称。如果在范围内声明了一个名为 myEnum 的变量,例如

int myEnum;

然后使用这个函数声明

void y(enum myEnum e){}

允许引用名为 myEnum 的枚举,如果没有关键字 enum 将被变量声明隐藏。

这是一个演示程序。

#include <iostream>

enum myEnum{
  A, B, C
};

void x(myEnum e){}

int myEnum; 

//  compiler error
//void y(myEnum e){} 

void y(enum myEnum e){}

int main() {
    // your code goes here
    return 0;
}

正如所见,如果取消注释,注释的函数声明将无法编译。

【讨论】:

  • 注意(OT-ish):提及 C++11 枚举类可能是件好事。 enum class myEnum 有自己的范围,会减少意外
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2013-03-23
  • 2020-09-10
相关资源
最近更新 更多