2016-04-12 3 views
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?

+0

Sidenote: Убедитесь, что вы знаете, что делаете w.r.t. семантика при использовании ссылок const. См. [Int vs const int &] (http://stackoverflow.com/a/4705871/211160). И обратите внимание, что это может быть медленнее, чем возвращение int. – HostileFork

ответ

4

С _foo имеет тип const int, auto относится к const int. Измените код «Явный тип», чтобы вернуть const int&, и компилятор больше не должен жаловаться.

Смежные вопросы