2017-01-11 4 views
7

のメンバクラスを返す:いない引数の型のためながら次の例ではC++

class A 
{ 
public: 
    class B 
    { 
     ... 
    } 
    B Method(B argument); 
} 

A::B A::Method(B argument); 

は正確に、戻り型に必要な範囲であり、なぜですか? 【basic.lookup.qual]/3による

答えて

8

宣言子-ID修飾-ID修飾-IDの前に使用される名前である宣言で

定義されている名前空間のスコープ内で参照されると となります。 修飾IDに続く名前は、メンバーのクラスまたは名前空間の有効範囲 で検索されます。

資格-IDが宣言される前にしながら、パラメータの型は、それの後に来るので、パラメータの型の名前がAの範囲で自動的に検索されるのに対し、戻り値の型(つまり、A::Methodある)来ます戻り値の型名はそうではありません。末尾の戻り値型を使用して余分な修飾を避けることができます。

auto A::Method(B argument) -> B; 
+3

私は、それを得るために標準的な見積もりを10回ゆっくりと読まなければならなかった唯一の男ですか? – user

+0

@userあなたが語彙に慣れていないと読みにくいことが分かります。それで、私も以下で説明しました。 – Brian

+3

はい、あなたは間違いなく私にさらに20の読書を保存しました – user

関連する問題