我有一个类似于以下内容的C源代码。

bool getFlag(int param)
{
  static bool flag = false;
  if(param == 1)
    flag = true;
  return flag;
}

I have written the C++ version of the same as below.
class MyClass
{
  public:
    static bool getFlag(int param)
    {
      if(param == 1)
        flag = true;
      return flag;
    }
  private:
    static bool flag;
};


上面两个代码段之间有什么区别?
上面的C ++代码在任何方面都比C代码具有优势吗?

最佳答案

它有点相似。与您的类MyClass的任何实例进行交互的任何人都将与相同的变量标志进行交互。

您的功能也是如此。任何调用者都将与相同的静态变量进行交互。

但是,它们在多线程环境中的行为(取决于您的编译器)肯定存在歧义(您是在编译纯c函数还是在新的编译器中混合使用c / c ++?)

基本上,初始化在C ++ 11之前不是线程安全的,如果两个线程到达了局部静态变量的初始化(或后续修改),您将获得数据竞争。一直存在到Microsoft的Visual Studio 2015。

因此,在现代编译器上,C ++的行为有所不同。

https://stackoverflow.com/a/11711991/128581


  如果控件在变量为时同时输入声明
  初始化后,并发执行应等待完成
  初始化。

关于c++ - C函数内部的Static和C++类内部的Static之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45927096/

10-12 04:48