我有一个头文件要包含在另一个 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()
函数!!那么,静态有什么用呢?
最佳答案
你展示的是一个非常邪恶的头文件。
从不将
using namespace std;
放入头文件中。这会强制包括 header 在内的任何人在全局命名空间中拥有所有std
。使用某种形式的包含守卫。
static
使函数在包含它的.cpp
之外不可见。这意味着每个包含 header 的.cpp
都将拥有自己的函数拷贝。static
(非成员)函数仅应在您特别需要此行为时使用。如果您不使用
static
,您应该将定义从头文件移到源文件中(如果您希望定义一次),或者声明函数inline
(如果可能的话,它的代码将在每个调用站点上内联)。如果您不执行上述任何一项操作,并且在多个源文件中包含 header ,则会出现多个定义错误。
关于c++ - 通过包含访问函数与声明静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14211354/