【发布时间】:2023-03-03 00:41:01
【问题描述】:
通常当你的类中有一个常量私有成员变量时,它只有一个 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) 我需要获取另一个对象 - 我将使用本例中的vector——作为构造函数的参数,根据参数对象设置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 作为成员变量对我有什么好处吗?
【问题讨论】:
-
: m_value(!myVec.empty() ? myVec.size() + 1 : -1)? -
为什么一定要
const? -
关于你的更新 - 不,我看不到任何好处......
-
它是恒定的,因此它永远不会被改变。我将它用作游戏中对象的唯一标识符,并且我希望这些标识符在整个游戏过程中保持不变。我认为让它保持不变是个好主意,但仍然不确定它的好处。
-
你得到了一些价值。编译器可以假设无论发生什么,重复调用同一对象的 getter 将产生相同的值。但是使用它作为唯一标识符,嗯……这就是指针的用途。
标签: c++ constructor initialization constants