我有一个类似于以下内容的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/