C++ 类中的成员通常不应该是 const 吗?
我建议您忽略“通常”如何声明变量。的出现频率const
不应让您决定下一个要声明的变量 is 或 is const
。
const
如果在整个程序执行过程中初始化后不应该更改成员的值,则成员应该是。否则,他们不应该是const
。这是数据的语义属性,决定是否创建变量的唯一标准const
是变量相对于值变化的性质。
它可以改变,还是保持不变? 在后一种情况下,一定要做到const
。
这必须暗示在内部, std::string 只有非常量成员变量,对吗?
不,这并不意味着它,尽管这可能恰好是std::string
.
重要的是,你的类中不仅 const
有成员(当然,只要你想离开它并且你的类封装了一些资源),所以那些实际上可以用来判断一个对象是否已经被移动自是可修改的。
当你离开一个物体时,你留下的是一个骨架。移动构造函数或移动赋值运算符需要一种方法来“标记”这个被移动的对象作为骨架。通常,这很自然地源于从对象中“窃取内脏”的过程,即复制一些指针并将它们设置为空 - 这样,析构函数和赋值运算符就不会尝试释放它们。为了将移动对象标记为“僵尸”,显然您需要一些可修改的成员变量。
但是,在您的班级中也有一些const
成员并没有错。const
是一个重要的修饰符,它使你的程序的语义更清晰,你的程序不太可能破坏它。只要合适(即,只要 A 变量的值在初始化后的整个程序执行过程中都不会改变),请使用它。
简单地说,const
成员变量不会被移动构造函数或移动赋值运算符修改(事实上,它们不会被任何函数修改);但同样,这并不意味着他们不能在场。