pair的数据成员为public,然而下面这段代码却不能编译,why?
pair <int,int> p2 = {0,42};//doesn 't compile,why?
[解决办法]
没有重载这样的=操作符
直接调用构造函数
pair <int,int> p2(0,42);
[解决办法]
用pair <int,int> p2(0,42);就OK 了哦。。
[解决办法]
template <typename X,typename Y>
class Test
{
public:
X x;
Y y;
};
Test <int,int> test = {0,42};//这可以的,为什么他就能编译,他也没有重载=操作符啊
=================================================================================
你这个没有默认的构造函数,编译器合成了一个,才让你={0,42}成功了。
你若自己再加上定义一个Test(){},这时候你有构造函数了,编译器不再为你合成了,
就不行了,你的这种就非法了。大概就是这个意思了。
因为pair有自己的构造函数。所以要求你的初始化式,符合pair构造函数的声明。
[解决办法]
在没有自己定义任何构造函数的时候,编译器才让你={0,42}成功,C++标准规定而已。
[解决办法]
好像有个make_pair宏