2

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

5 回答 5

5

这只是另一种铸造方式。(type)value并且type(value)通常是等价的。唯一的例外是涉及的类型的名称由两个或多个标记组成,例如char *or unsigned long(unsigned long)x允许,但unsigned long(x)不允许)。

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

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

在任何情况下,你得到的都是语义上的 C 风格转换。大多数 C++ 程序员通常会避免使用这些,因为它们的含义可能有些模棱两可。根据用途,它可能等同于 a static_cast、 a reinterpret_cast、 a const_cast、它们的组合,或者您根本无法使用新式演员表进行的演员表。

于 2013-04-23T22:51:14.343 回答
0

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

于 2013-04-23T22:49:45.973 回答
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)
于 2013-04-23T22:50:09.510 回答
0

它只是铸造..也许你应该使用 C++ 风格的铸造虽然

someFunction( static_cast<SomeEnum>( 2))
于 2013-04-23T22:52:23.930 回答
0

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

于 2013-04-23T22:56:55.023 回答