在试图刷新我的C++时,我一直在试图找出创建访问器的最佳实践方式。C++ const访问器和引用最佳实践
我想澄清我的理解,并找出我所做的是对的。我有几个问题,但它们看起来非常简单,所以我将它们全部引入了这个Stack Overflow问题。
以下是代表什么我“想”是做事的正确方法是一些示例代码:
class MyClass
{
private:
std::string StringMember_;
int IntMember_;
public:
MyClass(const std::string &stringInput, const int &intInput) : StringMember_(stringInput), IntMember_(intInput)
{
}
const std::string &StringMember() const
{
return StringMember_;
}
void StringMember(const std::string &stringInput)
{
StringMember_ = stringInput;
}
const int &IntMember() const
{
return IntMember_;
}
void IntMember(const int &intInput)
{
IntMember_ = intInput;
}
};
我的问题是:
凡我访问器返回const
引用变量,即const std::string
,这意味着它(我的类的成员变量)不能改变。那是对的吗?
方法的主体之前的最后const
指示该方法所属的类的成员不能改变,除非它们被指定为mutable
。这是否正确?
如果我传递的是const
方法参数,这意味着我确保这些参数在传入时始终保存,从而保护传入的所有原始变量不被方法体更改。这是否正确?
关于mutable
关键字,在什么情况下我真的想要使用它?我一直在努力想出一个很好的场景,我需要一个需要修改类成员的const方法。
访问者似乎是一个好主意,即使对于永远不会公开的数据,因为它确保了单点入口,允许更容易的调试等等。我是否在这里考虑了正确的思路,或者这实际上完全没有意义,并且不需要私人访问者?
从纯粹的句法角度来看,我应该写作我的参考文献,如const int& intInput
或const int &intInput
。这个符号的位置究竟在哪里,还是仅仅是个人喜好的问题?
最后,我在上面的例子中做了什么?我打算开始制定一个更大的个人项目,并且我希望在这些核心基础知识之后再开始解决问题。
我用这个作为参考:https://isocpp.org/wiki/faq/const-correctness
为什么downvote?另外,我已经更新了标题,尝试使它更清晰。 – Interminable
我的猜测是,这是因为你问了不止一个问题。我们倾向于每个问题提出一个问题。也就是说,除了最后一个问题以外的所有问题都是微不足道的,所以在我看来没问题。然而,最后一个问题是,对于计算器而言,这两者都过于宽泛且意见相左。 – user2079303
我确实认为他们对于个别问题来说过于微不足道。 至于最后一个,我主要是想知道我是否在做任何我没有发现的错误。 – Interminable