通常当你的类中有一个常量私有成员变量时,它只有一个 getter 而没有 setter,它看起来像这样:
// Example.h
class Example {
public:
Example(const int value);
const int getValue() const;
private:
const int m_value;
};
// Example.cpp
#include "Example.h"
Example::Example(const int value)
: m_value(value)
{
}
const int Example::getValue() const
{
return m_value;
}
现在我想做的是有一个像这样的常量 int 成员变量,而不是像这样在初始化部分定义它:: m_value(value)
我需要使用另一个对象 - 我将在这个例子中使用一个向量 - 作为构造函数的参数,并根据参数对象设置m_value。在这种情况下,如果大小大于 0,我将尝试做向量的大小 + 1。所以这就是我所做的:
Example::Example(std::vector<Example*> myVec)
{
if (myVec.size()) {
m_value = myVec.size() + 1;
}
else {
m_value = -1;
}
}
但是我得到一个错误uninitialized member 'Example::m_value' with 'const' type 'const int'
,如果我在初始化部分初始化 m_value,我得到的错误assignment of read-only data-member 'Example::m_value'
对我来说都是有意义的,我应该得到这些错误,但我怎么能绕过它们呢?
编辑:我可以编辑的唯一方法m_value
是在对象本身内部(因为 m_value 是私有的)。只有 getter 会限制我将 m_value 设置为构造函数中设置的值以外的任何值。将常量 int 作为成员变量对我有什么好处吗?