以下两种实现访问私有常量类成员的实现有什么区别?
// Auto& (compile ok)
class Foo {
private:
const int _foo;
public:
Foo(const int& in) : _foo(in) {}
auto& foo() { return _foo; }
}
// Explicit type (compiler error)
class Foo {
private:
const int _foo;
public:
Foo(const int& in) : _foo(in) {}
int& foo() { return _foo; }
}
对于auto
,编译器不会抱怨,但显式int
类型声明实际上会给出编译器错误(这是由于constness)。在这种情况下,推导出auto
是什么?
答案 0 :(得分:4)
由于_foo
的类型为const int
,auto
指的是const int
。更改您的'明确类型'返回const int&
的代码,编译器不应该再抱怨了。