C ++ / CLI,类声明之外的静态构造函数

时间:2010-07-06 16:24:44

标签: static constructor c++-cli

如何将托管类的静态构造函数体置于类声明之外?这种语法似乎是可编译的,但它是否真的意味着静态构造函数,或者只是一个静态(=不可见的外部翻译单元)函数?

ref class Foo {
    static Foo();
}

static Foo::Foo() {}

1 个答案:

答案 0 :(得分:18)

是的,这是创建C ++ / CLI静态构造函数的正确语法。您可以知道它不是创建静态函数,因为它不是有效的函数声明语法。函数必须具有指定的返回类型。此外,编译器会抱怨Foo()不是Foo类的成员,如果它没有将它链接到您在类定义中声明的构造函数。

你可以很容易地测试:

using namespace System;

ref class Foo {
    static Foo();
    Foo();
}

static Foo::Foo() { Console.WriteLine("Static Constructor"); }
Foo::Foo() { Console.WriteLine("Constructor"); }

int main(array<System::String ^> ^args)
{
    Foo ^f = gcnew Foo();
    Console.WriteLine("Main");
}

这将输出:

  

静态构造函数
  构造
  主