带有static关键字的[C ++]函数模板

时间:2010-12-03 18:29:12

标签: c++ templates

google的v8 js引擎代码,allocation.h:

 template <typename T>
 static void DeleteArray(T* array) {
  delete[] array;
}

这是一个功能模板(顶级,不在任何类中)。 但是static关键字的用途是什么?

3 个答案:

答案 0 :(得分:2)

这是一个模板实际上是一个副作用。

它是静态的意味着该函数在文件外部是不可见的(但由于它在标题中,标题实际上是包含它们的文件的一部分,这意味着包含标题的文件之外;以及每个文件包括标题有效地拥有自己的,相同但私有的函数版本。)

来自http://msdn.microsoft.com/en-us/library/s1sb61xd%28VS.80%29.aspx

  

“修改变量或函数时   在文件范围,静态关键字   指定变量或   功能有内部联系(其中   从外面看不到名字   声明它的文件。“

请在此处详细了解在头文件中包含此内容的含义:

C/C++: Static function in header file, what does it mean?

答案 1 :(得分:1)

static关键字给定义“内部链接”,这意味着在不同的源文件中给名称DeleteArray另一个含义或不同的定义是合法的。 (就像static void f();static int i;的情况一样。)但我无法想象有人会想要这样做。

不推荐在C ++中使用static这种方式。如果没有static关键字,此声明可能会更好,使其隐式extern(仍然是inline)。在这种情况下,允许链接器将来自多个对象的DeleteArray<T>(T*)的任何定义组合在一起,因为它们是相同的。

答案 2 :(得分:0)

static个函数(在类之外)不能使用outside the defining file。这是C的保留,没有名称空间。我打赌你会发现DeleteArray()没有从另一个文件调用,除非它已在另一个文件中重新定义。