类中的成员变量C++对于该类的所有对象始终是常量
Member variable in C++ class that is always constant for all objects of that class?
我正在构造一个类,其中我有三个成员变量,无论如何,我希望它们始终是相同的值。
我有
class foo{
public:
double var_1, var_2, var_3;
double x=1, y=2, z=3;
[functions go here]
};
这给了我一个错误,因为我无法初始化这样的变量。但我希望 x、y 和 z 始终分别为 1、2 和 3。我尝试在类外定义它们,但这不起作用,因为我希望它们成为类的成员变量。
我该怎么做?
使这些值对于类来说是静态的,这样所有对象都将继承这些相同的值。
static const int x = 1;
static const int y = 2;
static const int z = 3;
从技术上讲,这并不定义变量。如果静态数据成员是 const 整型或 const 枚举类型,则可以在静态数据成员的声明中指定常量初始值设定项。此常量初始值设定项必须是整数常量表达式。请注意,常量初始值设定项不是定义。您仍然需要在封闭命名空间中定义静态成员。
#include "foo.h"
#include <//libs....>
int foo::x;
int foo::y;
int foo::z;
//class functions down below
还可以使用构造函数中的初始值设定项列表来设置这些字段的初始值,就像任何其他成员一样:
class foo {
public:
const double x;
const double y;
const double z;
foo() : x(1), y(2), z(3) {
}
};
您不必将它们设为静态。您可以像这样声明它们:
class foo{
public:
double var_1, var_2, var_3;
const double x=1.0;
const double y=2.0;
const double z=3.0;
[functions go here]
};
虽然如果它们是整数值,那么将它们声明为 int
s 会更好。
相关文章:
- 代理对象的常量正确性
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 如何使用数据对象上的常量指针初始化类
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 为什么当我们有常量引用时创建临时对象?
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- C++,如何使用常量对象和非常量对象进行比较?
- 通过从构造函数中的'this'复制的指针改变常量对象
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- C++将常量字符* 指针数组传递给对象
- C++ 对非常量对象的常量引用和对非常量对象的非常量引用之间的区别
- 未定义的对象(〔basic.life〕/8):为什么允许引用重新绑定(和常量修改)
- 当类具有常量时,将对象插入到向量中
- 算法不适用于非常量对象的const_iterator
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 为什么MSVC14允许声明指向动态未初始化常量对象的指针
- 可作为常量调用的比较对象
- C++中的常量对象或私有/常量数据成员(变量)?
- 将值从指针复制到常量对象参数
- 如何正确组合可变对象常量