在这里你可以在c++中声明变量
Where you can declare variables in C++?
我正在看c++ faq。在第16章,使用静态中说:
" const静态数据成员在类中声明,通常为在源文件中定义(并初始化),例如.cpp文件。但在某些情况下,它可以在类体中初始化。"
然后继续提到在哪里可以声明整型和非整型(尽管我认为这在c++ 11中对整型有所改变)。
我的问题是,上面的内容只适用于const静态数据成员,而不适用于非const静态数据成员吗?
我开始真的很困惑,不明白为什么有这些限制?对于volatile, mutable和其他关键字变量是否有这些规则?人们如何能够轻松地学习这些内容(除了全天候编程)?
c++ 2011在声明变量方面没有改变任何东西!但是,您可以初始化类定义体中的所有成员变量。在构造对象时,在类定义中声明的值是默认使用的值。但是,如果成员初始化列表提到了成员,则初始化列表优先。
静态数据成员通常需要定义。然而,static
和const
成员可以在类体中声明和初始化:如果成员没有绑定到引用或其地址被占用,声明就足够了,您不需要提供定义。然而,如果你取地址,它仍然需要被定义。
以下是如何设置成员初始化默认值的几个示例:
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类型,则在更新时需要一个地方保存该值。
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]