2017-01-11 59 views
7

在下面的例子:返回構件類在C++

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

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

到底爲什麼需要返回類型的範圍,而不是爲參數類型?

回答

8

根據[basic.lookup.qual]/3,

在聲明,其中說明符-ID合格-ID,所述合格-ID之前使用的名稱被聲明爲 在定義的命名空間範圍內被查找;在成員的類或名稱空間的範圍 中查找限定標識後面的名稱。

返回類型來之前的合格-ID被聲明(即A::Method),而參數類型來後,這樣的參數類型的名稱會自動的A範圍內擡頭,而返回類型的名稱不是。我們可以避免使用尾隨返回類型的額外限定條件。

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

我是唯一一個爲了得到它而不得不慢慢閱讀標準報價10次的人? – user

+0

@user我知道如果你不熟悉詞彙,閱讀起來並不那麼容易。這就是爲什麼我也在下面解釋。 – Brian

+3

是的,你肯定爲我節省了額外的20次閱讀 – user