我正在阅读 C++ 常见问题解答。在第 16 章“使用静态”中,它说:
"a const static data member is declared in the class and is normally defined (and initialized) in a source file, such as a .cpp file. But in some cases it can be initialized in the class body proper."
然后继续提到可以在何处声明整型和非整型(尽管我认为这对于 C++11 中的整型有所改变)。
我的问题是,上述内容是否仅适用于 const 静态数据成员,而不适用于非常量静态数据成员?
我开始感到非常困惑,不明白为什么会有这些限制?对于 volatile、mutable 和其他关键字变量有这些规则吗?人们如何才能轻松学习这一点(除了 24/7 进行编程之外)?
最佳答案
C++ 2011 在声明变量方面没有任何改变!但是,您可以初始化类定义主体中的所有成员变量。构造对象时,类定义中声明的值是默认使用的值。但是,如果成员初始值设定项列表提及成员,则初始值设定项列表优先。
静态数据成员一般需要定义。但是,static
和 const
成员可能会在类主体中逃脱声明和初始化:如果该成员未绑定(bind)到引用或其正在获取的地址,声明就足够了,您不需要提供定义。但是,如果您获取地址,仍然需要定义它。
以下是如何设置成员初始化默认值的一些示例:
class foo
{
private:
int i{5};
int j = 6;
std::vector<int> v{ 1, 2, 3, 4 };
std::vector<int> w = std::vector<int>(2, 10);
std::vector<int> z = decltype(z)(2, 10);
// ...
};
请注意,使用括号不起作用。因此,可能有必要使用上面最后两种形式之一。
关于c++ - C++ 中哪里可以声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147994/