您的位置:首页 > 大数据 > 人工智能

关于标准库中std::make_pair的一个问题

2013-03-03 15:57 344 查看
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.csdn.net/topics/390213723

其实这个问题本身就是因为没有搞清楚左值与右值的概念才发生的

这里有一篇已经讲得比较详细了:

http://blog.csdn.net/csdnji/article/details/169200

vs2012用的是C++11,这里还有一篇关于C++11的右值引用的概念:

http://developer.51cto.com/art/201202/316758.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: