我有这个c ++代码:
static class UEnum* EViewModeIndex_StaticEnum()
{
static class UEnum* Singleton = NULL;
if (!Singleton)
{
...
}
return Singleton;
}
此代码是游戏引擎的一部分,可以正确编译和运行。但是,我不理解第一行和第三行中“类”的含义。
答案 0 :(得分:3)
它是static
功能。 class
与UEnum
一致。此静态函数的返回类型为class UEnum*
。但通常,我们不会在这里写课。所以它与static UEnum* EViewModeIndex_StaticEnum()
答案 1 :(得分:3)
如果有class A
,则可以使用class A
声明变量,返回类型或参数类型。这与仅使用A
用于同一目的相同。在这种情况下,class
的使用是多余的,但是合法的。
class A
{
// ...
};
void foo()
{
// Create an instance of A using the simple syntax.
A f1;
// Create an instance of A using the redundant class keyword
// Use of class is redundant but legal.
class A f2;
}
但是,在某些情况下,有必要使用class/struct
关键字来消除class/struct
名称中同名函数的歧义。
来自C ++ 11标准:
9.1班级名称
...
类声明将类名引入声明它的作用域,并在封闭作用域中隐藏该名称的任何类,变量,函数或其他声明(3.3)。如果在声明了同名变量,函数或枚举数的作用域中声明了类名,那么当两个声明都在作用域中时,只能使用elaborated-type-specifier来引用该类(3.4。 4)。 [示例:
struct stat { // ... }; stat gstat; // use plain stat to // define variable int stat(struct stat*); // redeclare stat as function void f() { struct stat* ps; // struct prefix needed // to name struct stat stat(ps); // call stat() }
- 结束示例]