下面是一些代碼寫在C++:Typedef-爲什麼這個C++代碼有效?
#include <iostream>
int main(){
typedef map<int,int> b;
b tC;
b::iterator iMap;
b().swap(tC);
}
我已經試過:
b.swap(tc);
但我不斷收到錯誤。
我不明白的是,爲什麼不能是b.swap(tC);
?
這是編譯器問題嗎?
對不起,我的英語。
下面是一些代碼寫在C++:Typedef-爲什麼這個C++代碼有效?
#include <iostream>
int main(){
typedef map<int,int> b;
b tC;
b::iterator iMap;
b().swap(tC);
}
我已經試過:
b.swap(tc);
但我不斷收到錯誤。
我不明白的是,爲什麼不能是b.swap(tC);
?
這是編譯器問題嗎?
對不起,我的英語。
因爲成員函數只能通過一個對象調用,所以需要在調用swap
之前創建一個對象。因此在:
b().swap(tC);
您正確創建一個臨時對象,並使用tC
交換它。
我想這條線聽起來很奇怪 - 「因爲b是一個類,因此它沒有成員函數。」 – SChepurin
因爲b
是一種類型。你不能在類型上調用swap
。你需要建立b
類型的對象,然後調用swap
就可以了,這是你與b().swap(tC);
做這一行typedef map<int,int> b;
是創建一個新類型,稱爲b
,其中有map<int,int>
屬性。因此,爲了使用b
類型和b
類型的對象,您必須遵循相同的規則,就好像您在使用類map<int,int>
一樣。
在類map
中,函數swap
是成員函數。這就是爲什麼你需要一個對象才能使用它。如果它是一個靜態的功能,你可以直接調用它的類型,雖然該語法有一點不同:(!但不是b.swap(x)
)b::static_function()
由於已經有很多答案,我只是在這裏添加這個註釋:似乎sannim是一個初學者,因此它可能值得解釋爲什麼b是一種類型,或者更好地解釋typedef的一般含義 – Shelling
它相當於'map .swap(tC);'。你不指望這個工作,是嗎? –
molbdnilo