c++ - 通过包含访问函数与声明静态

标签 c++ oop static include

我有一个头文件要包含在另一个 cpp 文件中。我想知道这样写头文件有什么区别,

#include <iostream>
#include <string>
using namespace std;

string ret()
{
return "called";
}

===================================

#include <iostream>
#include <string>
using namespace std;

static string ret()
{
return "called";
}

无论如何我都可以访问ret() 函数!!那么,静态有什么用呢?

最佳答案

你展示的是一个非常邪恶的头文件。

  1. 从不using namespace std; 放入头文件中。这会强制包括 header 在内的任何人在全局命名空间中拥有所有 std

  2. 使用某种形式的包含守卫。

  3. static 使函数在包含它的 .cpp 之外不可见。这意味着每个包含 header 的 .cpp 都将拥有自己的函数拷贝。 static(非成员)函数仅应在您特别需要此行为时使用。

  4. 如果您不使用static,您应该将定义从头文件移到源文件中(如果您希望定义一次),或者声明函数 inline(如果可能的话,它的代码将在每个调用站点上内联)。如果您不执行上述任何一项操作,并且在多个源文件中包含 header ,则会出现多个定义错误。

关于c++ - 通过包含访问函数与声明静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211354/

相关文章:

c++ - map的反向迭代,通过getter访问/无拷贝

c++ - 如何克服 WaitForMultipleObjects 的 MAXIMUM_WAIT_OBJECTS 限制?

java - 在Java中,为什么我们需要一个对象来调用同一个类的main函数中的函数,但没有对象来调用非main函数中的其他函数?

Matlab 删除我的值(value)观

java - 有没有办法静态分析plugin.xml的引用

Java TimerTask 不更新静态字段

C++ If 语句问题 - 显示错误信息

c++ - C++ 中的跨平台字符串(和 Unicode)

java - 需要有关概念 "Do Not Repeat Yourself"编码实践的建议

qt - Appveyor - 编译静态 qt5.10 应用程序(使用 openssl 和 qml webview)