c++枚举类型可以作为函数调用吗?或者它只是一种不同风格的类型转换



我发现表达式enum-type-name(整数值)在一些库中,但它看起来有点奇怪,它真的是它看起来像什么(至少对我来说)?枚举类型可以作为函数调用,或者它只是另一种类型的枚举类型转换?还是别的什么?例如:

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?? 

这只是另一种类型的强制转换。(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,或者它们的组合,或者是您根本无法使用新型强制转换的强制转换。

就像其他对象一样,您可以使用构造函数创建临时对象。在本例中,您正在传递一个临时SomeEnum对象,其值为2

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)

这只是cast ..也许你应该使用c++风格的强制转换

someFunction( static_cast<SomeEnum>( 2))

enum是c++中的一种类型。SomeEnum(2)只是一个类型强制转换。c++(11)带来了enum类,这是一种更好的类型表示,符合oop术语。

最新更新