在这里你可以在c++中声明变量

Where you can declare variables in C++?

本文关键字:声明 变量 c++ 在这里      更新时间:2023-10-16

我正在看c++ faq。在第16章,使用静态中说:

" const静态数据成员在类中声明,通常为在源文件中定义(并初始化),例如.cpp文件。但在某些情况下,它可以在类体中初始化。"

然后继续提到在哪里可以声明整型和非整型(尽管我认为这在c++ 11中对整型有所改变)。

我的问题是,上面的内容只适用于const静态数据成员,而不适用于非const静态数据成员吗?

我开始真的很困惑,不明白为什么有这些限制?对于volatile, mutable和其他关键字变量是否有这些规则?人们如何能够轻松地学习这些内容(除了全天候编程)?

c++ 2011在声明变量方面没有改变任何东西!但是,您可以初始化类定义体中的所有成员变量。在构造对象时,在类定义中声明的值是默认使用的值。但是,如果成员初始化列表提到了成员,则初始化列表优先。

静态数据成员通常需要定义。然而,staticconst成员可以在类体中声明和初始化:如果成员没有绑定到引用或其地址被占用,声明就足够了,您不需要提供定义。然而,如果你取地址,它仍然需要被定义。 以下是如何设置成员初始化默认值的几个示例:
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);
    // ...
};

注意,使用括号不起作用。因此,可能需要使用上面最后两种形式中的一种。

一般的推理是,如果它需要存储,则必须在源文件中定义它。如果它是静态const整型,则不需要存储空间——编译器可以在使用该变量的任何地方替换一个文字整型。如果它是非静态的,则它是需要在每个对象中存储的成员变量。如果它是非const类型,则在更新时需要一个地方保存该值。