【发布时间】:2015-04-16 20:02:02
【问题描述】:
我对 C++ 比较陌生,并且对 private 静态成员或“免费非成员”有疑问。
我可以这样写代码:
// MyClass.h - Version 1
class MyClass
{
public:
MyClass();
~MyClass();
private:
static int iValue;
};
// MyClass.cpp
int MyClass::iValue = 123;
没有私有成员的另一种方式,在cpp内部有内部链接
// Version 2 - static
static int iValue = 123;
// or anonymouse namespace
namespace
{
int iValue2 = 123;
}
我能看到的唯一区别是课堂外的“可见性”,即使我不能使用它。
如果我想在派生类之外或在派生类中使用 iValue,我将在版本 1 中将静态成员声明为 public 或 protected 或在类之上完全全局。
关键字 const 对我来说更不清楚。
class MyClass
{
private:
static const int iValue;
// (...)
}
我总是希望尽可能多地向外界隐藏东西。
简而言之:有什么理由让我更喜欢第 1 版而不是第 2 版?
亲切的问候
尼西
【问题讨论】:
-
很难选择。大多数时候你不应该使用这些。如今,静态变量和全局变量都被认为是一种代码异味。
-
这主要是语义上的东西:
iValue是否与MyClass密切相关?那么它应该在课堂上。如果它只是一些与MyClass关系不大的 CPP 中需要的幻数,那么请将其分开。请记住,C++ 从 C 开始,然后在它之上构建——你可能有namespace等,但在任何地方都没有使用类......