google的v8 js引擎代码,allocation.h:
template <typename T>
static void DeleteArray(T* array) {
delete[] array;
}
这是一个功能模板(顶级,不在任何类中)。 但是static关键字的用途是什么?
答案 0 :(得分:2)
这是一个模板实际上是一个副作用。
它是静态的意味着该函数在文件外部是不可见的(但由于它在标题中,标题实际上是包含它们的文件的一部分,这意味着包含标题的文件之外;以及每个文件包括标题有效地拥有自己的,相同但私有的函数版本。)
来自http://msdn.microsoft.com/en-us/library/s1sb61xd%28VS.80%29.aspx:
“修改变量或函数时 在文件范围,静态关键字 指定变量或 功能有内部联系(其中 从外面看不到名字 声明它的文件。“
请在此处详细了解在头文件中包含此内容的含义:
答案 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()
没有从另一个文件调用,除非它已在另一个文件中重新定义。