这里有一些用C ++编写的代码:
#include <iostream>
int main(){
typedef map<int,int> b;
b tC;
b::iterator iMap;
b().swap(tC);
}
我试过了:
b.swap(tc);
但我一直收到错误。
我无法理解的是,为什么它不能成为b.swap(tC);
?
这是编译器问题吗?
抱歉我的英文。
答案 0 :(得分:9)
因为b
是一种类型。您无法在某种类型上调用swap
。您需要构建b
类型的对象,然后在其上调用swap
,这就是您对b().swap(tC);
所做的事情
此行typedef map<int,int> b;
正在创建名为b
的新类型,其属性为map<int,int>
。因此,为了使用类型b
和b
类型的对象,您必须遵循与使用类map<int,int>
相同的规则。
在班级map
中,函数swap
是一个成员函数。这就是为什么你需要一个对象才能使用它。如果它是一个静态函数,你可以直接在类型上调用它,虽然它的语法有点不同:b::static_function()
答案 1 :(得分:3)
因为只能通过对象调用成员函数,所以在调用swap
之前需要先创建一个对象。因此:
b().swap(tC);
您正在创建临时对象并使用tC
进行交换。
答案 2 :(得分:3)
b::swap(x)
是静态类方法,那么 b.swap(x)
(但不是swap()
!)会有效。但是swap()
是一个实例方法,因此只能用于类b
的对象的实例(typedef
的{{1}})。
map<int,int>
不会发出错误,因为它适用于类b().swap(x)
的对象的实例。但是,此调用可能不太有用,因为实例化后会立即销毁此实例b
。