c++ - 在文件之间共享静态变量: namespace 与类

标签 c++ class static namespaces

这里有很多关于静态与全局的问题,但我认为我的问题有些不同。

我想知道是否有一种方法可以像类中的静态变量那样跨文件共享放置在命名空间中的变量。

例如,我编码为:

//Foo.h
class Foo
{
  public:
  static int code;
  static int times_two(int in_);
};

namespace bar
{
  static int kode;
}

--
//Foo.cpp
int Foo::code = 0;

int Foo::times_two(int in_)
{
  bar::kode++;
  code++;
  return 2*in_;
}

--
//main.cpp
int main()
{
  cout << "Foo::code = " << Foo::code << endl;

  for(int i=2; i < 6; i++)
  {
    cout << "2 x " << i << " = " << Foo::times_two(i) << endl;
    cout << "Foo::code = " << Foo::code << endl;
    cout << "bar::kode = " << bar::kode << endl;

    if(i == 3)
    {
      bar::kode++;
    }
  }
}

为代码和kode产生的所有代码:
Foo::code = 1,2,3,4
bar::kode = 0,0,1,1

再有,是否有一种方法可以像类中的静态变量那样在文件之间共享放置在命名空间中的变量?我问的原因是因为我认为我可以使用::表示法保护自己免受全局变量的隐瞒,而发现我做不到。和任何自卑的程序员一样,我相信我做错了。

最佳答案

是:

//bar.h
namespace bar
{
  extern int kode;
}

classstruct之外,static具有完全不同的含义。它提供了一个符号内部链接。因此,如果您声明与static相同的变量,则实际上您将为所有翻译单元获得不同的副本,而不是唯一的全局变量。

请注意,一旦,您将需要初始化变量:
//bar.cpp
namespace bar
{
   int kode = 1337;
}

关于c++ - 在文件之间共享静态变量: namespace 与类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60859138/

相关文章:

c++ - 我怎样才能在qtcreator中全部展开

java - cerr (c++) 怎么会出现在 Stdout (Java) 中?

c++ - 如何修复 "There too many argument in this opreator"

c++ - 使用 Visual Studio C++ 进行单元测试时链接器错误

c++ - 替换 std::vector 中的 shared_ptr 元素

java - 如何创建具有相关子对象的多个游戏对象

python - 属性错误 : 'datetime' module has no attribute 'strptime'

java - Java中静态 block 的执行

jquery - 单击链接时保持屏幕静态

data-structures - Haskell 中的嵌入图像