假设我们有一个包含以下两个成员函数的成员类:
class SomeClass
{
private:
int val = {};
public:
const int getVarLRef() & {
return val;
}
const int getVarCLRef() const& {
return val;
}
};
int main()
{
auto var1 = SomeClass().getVarCLRef();
auto var2 = SomeClass().getVarLRef();
return 0;
}
我不太明白const&
和&
之间有什么区别。如果我们将getVarCLRef
函数指定为const&
,那么它为什么可以与之一起工作?难道不能只用lvalues调用它吗?
另一方面,getVarLRef
却工作得很好,并且在这种情况下如预期地无法编译。
我使用的是C++11和gcc 7.3.0
auto
翻译成int
而不是int&
。如果你想让它成为引用类型,你应该使用auto&
。 - Denis Sheremet&
要求对象是一个左值)... - Max Langhofx.get().foo();
),但仍然可以几乎总是(自C++17以来;由于保证复制省略)通过auto y = x.get(); y.foo();
绕过。 - Aconcagua