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

时间:2013-04-23 22:47:29

标签: c++ casting enums

我在某个库中找到了表达式 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?? 

5 个答案:

答案 0 :(得分:5)

这只是另一种铸造方式。 (type)valuetype(value)通常是等效的。唯一的例外是所涉及类型的名称包含两个或多个令牌,例如char *unsigned long(因此允许(unsigned long)x,但unsigned long(x)不允许

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

typedef unsigned long ulong;
a = ulong(x);

无论如何,你得到的是语义上的C风格演员。大多数C ++程序员一般都会避免这些,因为它们的含义可能有些含糊不清。根据使用情况,它可能相当于static_castreinterpret_castconst_cast,它们的组合,或者您无法使用新式演员阵容的演员阵容所有

答案 1 :(得分:0)

就像其他对象一样,您可以使用构造函数创建临时对象。在这种情况下,您传递的值为2的临时SomeEnum对象

答案 2 :(得分:0)

someFunction( (SomeEnum)2 );  // Works, Normal casting
someFunction( SomeEnum(2) );  // Works!! calling the enum as a function?? or just another style of enum casting??

实际上,这只是另一种投射语法。就像:

(int)2
int(2)

答案 3 :(得分:0)

它只是转换..也许你应该使用C ++样式转换

someFunction( static_cast<SomeEnum>( 2))

答案 4 :(得分:0)

枚举是C ++中的一种类型。所以SomeEnum(2)只是一个类型转换。 C ++(11)带来了枚举类,它是类型的更好表示,符合OOPS术语。