C++常量访问器和参考最佳实践
C++ const accessors and references best practice
在学习C++的过程中,我一直在努力寻找创建访问器的最佳实践方法。
我想澄清我的理解,看看我所做的是否正确。我有几个问题,但它们看起来很简单,所以我把它们都归结为一个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
如果我的访问器返回const引用变量,即const std::string,这意味着它(我的类的成员变量)不能更改。这是正确的吗?
正确。变量不能通过常量引用进行更改。
方法体前的最后一个常量表示,该方法所属类的任何成员都不能更改,除非它们被指定为可变的。这也是正确的吗?
正确。它还允许在const对象上调用函数。
在我传入const方法参数的地方,这意味着我确保这些参数总是在传入时存储,从而保护传入的任何原始变量不被方法体更改。这也是正确的吗?
正确。通过按值接受参数也可以实现同样的目的。
关于可变关键字,在什么情况下我真正想使用它?
请参阅您何时使用C++';可变';关键字?
即使对于永远不会公开的数据,访问器似乎也是一个好主意,因为它确保了一个单一的入口点,允许更容易的调试等等
我不相信这个论点。监视点允许轻松调试成员变量,无论从何处访问它们。
从纯粹的语法角度来看,我应该像constint&intInput或const int&intInput。
两者在语法上是等价的,在它们之间的选择纯粹是审美的。
最后,我在上面的例子中所做的是好的实践吗?
没有一般的答案。访问者有时很有用。它们通常是多余的。如果您提供了一个允许直接设置值的函数,比如您在这里所做的,那么您还可以去掉访问器并将成员公开。
在我看来,您对这里的概念掌握得很好。就mutable
示例而言,有很多,这里有一个:您有一个搜索方法,出于性能原因,您缓存最后的搜索结果。。。对于const搜索方法,该内部缓存需要是可变的。也就是说,外在的行为没有改变,但内在的东西可能会改变。
以下是mutable
:的一些示例
内存缓存,用于当某些东西是引用透明的时,但是计算成本很高,第一次调用(constqualified)访问者计算值并将其存储在可变成员哈希中表,第二个和后续调用从表中获取值相反
访问计数器、定时、记录器和其他需要的仪器当const限定的访问器被称为时更改某些状态
来源https://www.quora.com/When-should-I-actually-use-a-mutable-keyword-in-C++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++错误消息*成员参考.**初学者*
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- C++常量访问器和参考最佳实践
- 参考或返回-最佳实践
- C++参考与指针最佳实践