繁体   English   中英

C ++ const访问器和参考最佳实践

[英]C++ const accessors and references best practice

在尝试使用C ++时,我一直在尝试寻找创建访问器的最佳实践方法。

我想澄清一下自己的理解,并确定我在做什么是否正确。 我有几个问题,但是它们看起来很简单,因此我将所有问题都归结为一个堆栈溢出问题。

以下是一些示例代码,它们代表我的“想法”是正确的处理方式:

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& intInputconst int &intInput “&”号在哪里真的很重要,还是仅出于个人喜好?

最后,我在上面的示例中正在做的是良好实践吗? 我计划着手进行一个较大的个人项目,并且在以后开始遇到问题之前,我希望掌握这些核心基础知识。

我正在以此为参考: https : //isocpp.org/wiki/faq/const-correctness

在我的访问器返回const参考变量(即const std :: string)的地方,这意味着它(我类的成员变量)无法更改。 那是对的吗?

正确。 不能通过const引用更改变量。

方法主体之前的最后一个const表示该方法所属的类的成员不能更改,除非将它们指定为可变的。 这也正确吗?

正确。 它还允许在const对象上调用该函数。

在我传递const方法参数的地方,这意味着我确保这些参数始终在传递时存储,从而保护了传递的任何原始变量都不会被方法主体更改。 这也正确吗?

正确。 通过按值接受参数可以实现相同的目的。

关于mutable关键字,我实际上想在什么情况下使用它?

请参阅何时使用C ++'mutable'关键字?

存取器似乎是一个好主意,即使对于永远不会公开显示的数据也是如此,因为它确保了单点输入,从而使调试更容易等。 我在这里沿着正确的方向思考吗

我不赞成这种说法。 观察点可轻松调试成员变量,无论从何处访问它们。

从纯粹的语法角度来看,我应该编写诸如const int&intInput或const int&intInput之类的引用。

两者在语法上是等效的,它们之间的选择纯粹是美学上的。

最后,我在上面的示例中正在做的是良好实践吗?

没有普遍的答案。 访问器有时很有用。 通常它们是多余的。 如果像这里一样提供一个允许直接设置值的功能,那么您最好摆脱访问器并使成员公开。

在我看来,您对这里的概念非常了解。 就一个mutable例子而言,有很多:这是一个:您有一个搜索方法,出于性能原因,您缓存了最后一个搜索结果...对于const搜索方法,内部缓存将需要可变。 也就是说,外部行为没有改变,但是在内部可能有所改变。

这是mutable一些示例:

记忆缓存,对于某些东西是参照透明的,但是计算起来很昂贵,第一次调用(const限定)访问器会计算该值并将其存储在可变成员哈希表中,第二次和后续调用会从该表中获取值代替。

访问计数器,计时,记录器和其他需要在调用const限定访问器时更改某些状态的工具

来自https://www.quora.com/When-should-I-actually-use-a-mutable-keyword-in-C++

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM