我最近被一位學生問到關於編譯問題。答案很簡單,但現在我正在努力解決這個問題。 一個簡單的例子:返回參數的類型名查詢
#include <iostream>
#include <vector>
struct MyStruct
{
typedef std::vector<int> MyIntVector;
MyIntVector CopyVector(MyIntVector const& vector);
};
MyStruct::MyIntVector MyStruct::CopyVector(MyIntVector const& vector)
^^^^^^^^
{
MyIntVector vec;
return vec;
}
int main(int /*argc*/, char** /*argv*/)
{
MyStruct st;
}
爲了有效的C++代碼返回參數必須是完全合格的。答案如此之多,並使編譯器/學生感到高興。
但是爲什麼返回值需要用類和函數的參數限定呢?
我總是這樣做,我知道它與ADL查找有關,但現在我被要求尋找更好的答案。
任何人都可以給我一個參考規範或提示,我可以找到更多的信息?
而且可以有幾個功能* *的聲明就像你在你的例子顯示。對於朋友的聲明,這實際上也是有效的,在語義上,我認爲:struct C {friend void A :: f(),B :: f(); };'。 – 2011-04-14 12:17:22