2013-02-07 34 views
24

在文件中使用静态函数的效用是什么?C++静态本地函数vs全局函数

它们与文件中的全局函数有什么不同?

static int Square(int i) 
{ 
    return i * i; 
} 

VS

int Square(int i) 
{ 
    return i * i; 
} 

回答

30

什么是在文件中具有静态功能的实用程序?

您可以使用这些函数为同一文件中的其他函数提供共享实现逻辑。特定于文件的各种帮助函数是声明文件静态的好候选。

它们与文件中的全局函数有什么不同?

它们对链接器是不可见的,允许其他编译单元使用相同的签名来定义函数。使用名称空间在很大程度上缓解了这个问题,但是由于它们是从C编程语言继承的一个功能,所以它们在命名空间之前。

+0

当我读到默认的全局函数是外部函数时,这一切都变得很清楚了,那就是“void fun(){}”与“extern void fun(){}”是一样的......如果你不把它们放在一个头文件中,它们只能在它们被定义的实现文件中使用(低于它们被定义的点)。 –

+2

@Simon Knapp他们可以通过使用原型在不同的过渡单元中使用。 –

10

static函数简单地意味着该接头无法导出函数(即,使其对其他translation units可见)。它使当前翻译单元的功能“私密”。这与将函数包装在匿名命名空间中相同。

namespace { 

    int Square(int i) 
    { 
     return i * i; 
    } 

} 

通常,使用匿名命名空间是实现这个,而不是使用关键词static的优选C++方法。

+2

为什么它是首选?这对我来说似乎更加冗长。 – rozina

3

静态函数仅在仅定义它们的文件上可见。 你不能在特定文件之外引用它们。

Read more here

2

总之,联动。 static函数具有内部链接,也就是说,它们在其翻译单元之外不可见。