C++枚举类型可以作为函数调用,还是只是一种不同的转换方式?

bab*_*bbo 2 c++ enums casting

我在某个库中找到了表达式enum-type-name(integral-value),但它看起来有点奇怪,它真的是它的样子(至少对我而言)?枚举类型可以作为函数调用,还是只是另一种类型的转换枚举?或者是什么?例如:

enum SomeEnum
{
SOMETHING = 0,
OTHERTHING = 1
};

void someFunction(SomeEnum e)
{
// ...
}

someFunction( 2 ); // Invalid conversion
someFunction( (SomeEnum)2 );  // Works, Normal casting
someFunction( SomeEnum(2) );  // Works!! calling the enum as a function?? or just another style of enum casting?? 
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 5

这只是另一种铸造方式.(type)value并且type(value)通常是等同的.唯一的例外是当涉及的类型的名称包含两个或更多个令牌时,例如char *unsigned long((unsigned long)x允许但unsigned long(x)不允许).

即使在这样的情况下,您也可以为该类型创建单令牌名称,并等效地使用它:

typedef unsigned long ulong;
a = ulong(x);
Run Code Online (Sandbox Code Playgroud)

无论如何,你得到的是语义上的C风格演员.大多数C++程序员一般都会避免这些,因为它们的含义可能有些含糊不清.根据用途,它可能相当于a static_cast,a reinterpret_cast,a const_cast,它们的组合,或者根本不能用新式演员表演的演员.