我在某个库中找到了表达式 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??
答案 0 :(得分:5)
这只是另一种铸造方式。 (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
,它们的组合,或者您无法使用新式演员阵容的演员阵容所有
答案 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术语。