0
В чем разница между следующими двумя реализациями для доступа к частному члену постоянного класса?Автоматический вывод для члена класса const
// 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
типа на самом деле дает ошибку компилятора (что связано с константность). В этом случае выводится то, что выводится auto
?
Sidenote: Убедитесь, что вы знаете, что делаете w.r.t. семантика при использовании ссылок const. См. [Int vs const int &] (http://stackoverflow.com/a/4705871/211160). И обратите внимание, что это может быть медленнее, чем возвращение int. – HostileFork