【发布时间】:2017-08-28 20:45:51
【问题描述】:
我有一个预先存在的 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;
};
上面两个代码sn-ps有什么区别? 上面的 C++ 代码在任何方面都优于 C 代码吗?
【问题讨论】:
-
请注意,C 代码也是非常好的 C++ 代码。
-
你为什么这样做?原来的功能很好。具有单个静态函数和静态成员的类不会增加任何价值,除非您通过代码行获得报酬,否则没有理由这样做。请注意,同一个问题的措辞不同(例如,这两种方法在 C++ 中的区别)会有一个有效的答案。
-
类中的
static变量意味着所有类实例和后代共享一个实例。函数中的static变量仅对函数可见,并且在执行离开函数后变量是持久的。类中的static方法不需要类的实例来执行函数;类似于独立式功能。 -
@Neil Butterworth - “注意 C 代码也是非常好的 C++ 代码” - 我不会走那么远。当然,在 许多 的情况下,这是正确的。但是也有很多情况下,完全相同的代码在 C 和 C++ 下具有不同的语义。到目前为止,它们确实是不同的语言,与 C11 和 C++17 相比,自 C89/C++98 以来,语法和语义相同的公共子集已经缩小了很多。