2016-04-12 18 views
0

プライベート定数クラスメンバーにアクセスする次の2つの実装の違いは何ですか?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型宣言は、(const性によるものである)コンパイラのエラーを示します。この場合、autoは推測されますか?

+0

サイドノート:あなたがしていることを知っていることを確認してください。 const参照を使用するときのセマンティクス。 See [int vs const int&](http://stackoverflow.com/a/4705871/211160)。そしてintを返すよりも遅くなる可能性があることに注意してください。 – HostileFork

答えて

4

_fooは、タイプconst intであるため、autoは、const intを指します。 '明示的な型'のコードをconst int&に変更し、コンパイラはもう文句を言うべきではありません。

関連する問題