namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
// TODO: 在此输入测试代码
int i = 0, j = 0;
std::make_pair<int, int>(i, j);
}
};
}
请看以上这段伪代码
先说问题
这段代码在vs2005中能够正常编译通过,而在vs2012中就编译不过了(ps:对于其他编译器没有做过测试),在vs2012中会抛出如下:
error C2664: “std::make_pair”: 不能将参数 1 从“int”转换为“int &&”
无法将左值绑定到右值引用
解决方案:
std::make_pair(i, j);
直接这样写就对了
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
不知道从哪里学来的
std::make_pair<int, int>(i, j);
这种写法,因为一直在用vs2005,能够很正常的编译通过,所以也就没有注意过这个问题,就一直这么用着了
换成vs2012后,这样的代码就会报错了。
网上搜了下,找到一篇帖子,原帖子地址如下:
http://bbs.youkuaiyun.com/topics/390213723
其实这个问题本身就是因为没有搞清楚左值与右值的概念才发生的
这里有一篇已经讲得比较详细了:
http://blog.youkuaiyun.com/csdnji/article/details/169200
vs2012用的是C++11,这里还有一篇关于C++11的右值引用的概念: