有人能告诉我在课外声明静态函数的目的是什么?这两个有什么区别?在这种情况下使用静态有什么好处吗?
static void someRandomFunction();
int main()
{
someRandomFunction();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
void someRandomFunction();
int main()
{
someRandomFunction();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 48
在命名空间范围内,static给出名称内部链接,这意味着它只能在包含定义的翻译单元中访问.没有static,它具有外部链接,并且可以在任何翻译单元中访问.
因此static,在编写仅用于本单元的函数时,您将使用(或者,一个未命名的命名空间); 内部链接意味着其他单元可以使用相同的名称定义不同的功能,而不会导致命名冲突.
非标准函数(以及一般的全局名称)最好在标题中声明,以确保使用它们的每个翻译单元获得相同的声明.
Adi*_*vit 13
一个static函数只在文件范围内仍然可见.这是一个C功能.
在C++中执行此操作的推荐方法是使用匿名命名空间,如下所示:
namespace // no name, i.e. anonymous
{
void someRandomFunction();
}
int main()
{
someRandomFunction(); // visible only within this file.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,函数体也必须在同一文件中的某个地方声明,因为链接器不会尝试在其他(外部)转换单元中找到它.
因此void someRandomFunction();,实际上是在同一文件中的其他地方定义的函数的前向声明(即在相同的转换单元中).
如果实际调用了该函数,除非在同一文件中定义了函数体,否则将出现链接错误.
| 归档时间: |
|
| 查看次数: |
19894 次 |
| 最近记录: |