以const和const结尾的getter之间的区别

Cro*_*man 12 c++ getter

我看过Nicolai Josuttis(C++标准委员会成员)的一次谈话(确切的时间戳,不是由他解释),他说吸气剂应该是这样编写的:

const std::string& getName() const&
{
     return memberStringVar;
} 
Run Code Online (Sandbox Code Playgroud)

自从C++ 11以来.问题是,与这个吸气剂相比有什么不同?

const std::string& getName() const
{
     return memberStringVar;
}
Run Code Online (Sandbox Code Playgroud)

虽然这个问题可能是重复的,但我不会关闭这个问题,因为通过这个问题的答案及其可能的重复链接可能更容易找到正确的答案.基本上说这个问题的标题比副本的标题更直接(描述性).

P.W*_*P.W 7

在谈话中给出的例子中,给出了两个重载getName().一个与&&另一个与const&限定符.

如果没有&后面的const,则函数const std::string& getName() const不能因rvalues的重载而过载string Customer::getName() &&.

如果您希望它能够工作,那么您必须完全从代码中删除rvalue重载.

由于是在C++ 11只加入参考合格的成员函数(制造用于右值可能吸气),从改变const std::string& getName() constconst std::string& getName() const&使两者可能超载需要.

C++ 17标准草案n4659规定:

16.1可重载声明[over.load]
...

2某些函数声明不能​​重载:
...
(2.3) - 具有相同名称和相同参数类型列表的成员函数声明以及具有相同名称的成员函数模板声明,相同的参数类型列表,并且如果它们中的任何一个(但不是全部)具有ref-qualifier,则不能重载相同的模板参数列表.

由于有一个getName()带有ref-qualifier(&&)的重载,另一个也应该有ref限定符.这const&就是必需的原因.