2
例如,請考慮以下那裏是名nest1
的衝突:我們是否需要將嵌套類型的成員參數加上「::」?
template <typename U> class nest1 {};
class cls {
public:
template <typename V> class nest1 {};
template <typename W> class nest2 {
public:
void bar(nest1<W> x);
};
};
template <typename W>
void cls::nest2<W>::bar(nest1<W> x) {} // how does compiler know which nest<1>?
- 編譯器如何知道是否
bar
需要nest1<W>
或cls::nest1<W>
如果我們不使用前綴cls::
(如bar(cls::nest1<W> x)
) ? - 無論如何明確加前綴
cls::
是否是一種好的做法?
注:編譯器實際選擇隱含聲明bar(cls::nest1<W> x)
:
- 調用
cls::nest1<W> x; bar(x);
作品:http://ideone.com/3ZuH2Z - 傳遞
nest1<W> x; bar(x);
失敗:http://ideone.com/6HmA3f
同樣,當你有一個全局變量,並與同名的靜態數據成員的。 – chris 2013-05-11 01:59:20
因此,它只是剝離圖層並在最接近的父/祖類中找到所需的聲明? – mchen 2013-05-11 02:13:06
哦,我認爲它會選擇全球性的。你應該在你的問題中指定。 – chris 2013-05-11 02:17:21