我发现表达式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)value
和type(value)
通常是等价的。唯一的例外是当涉及的类型名称由两个或多个令牌组成时,例如char *
或unsigned long
(因此允许(unsigned long)x
,但不允许unsigned long(x)
)。
即使在这样的情况下,您也可以为类型创建一个单令牌名称,并等效地使用它:
typedef unsigned long ulong;
a = ulong(x);
在任何情况下,您得到的都是语义上的c风格强制转换。大多数c++程序员通常会避免使用这些词,因为它们的含义可能有些模糊。根据使用的不同,它可能相当于static_cast
、reinterpret_cast
、const_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术语。