【发布时间】:2017-07-15 04:18:53
【问题描述】:
#include<iostream>
#include<utility>
#include<tuple>
#include<functional>
using namespace std;
int main()
{
int i = 0;
auto p = make_pair(ref(i), ref(i++));
p.first++;
p.second++;
cout << "i = " << i << endl;
}
例如如果我像这样使用ref(),编译器会说
使用已删除的函数'void std::ref(const _Tp&&) [with _Tp = int]'
但是,如果我的代码正在跟踪
#include<iostream>
#include<utility>
#include<tuple>
#include<functional>
using namespace std;
int main()
{
int i = 0;
auto p = make_pair(ref(i), ref(++i));
p.first++;
p.second++;
cout << "i = " << i << endl;
}
我会成功得到输出i = 3,所以我不明白为什么我会得到如此不同的答案。
【问题讨论】:
-
ref(i++)- 临时引用,++i返回对原始变量的引用 -
@BlackMoses:请在回答部分中回答。
-
非常感谢,经过反思,我认为ref(i++)是对临时的引用是很合理的
标签: c++ c++11 move-constructor deleted-functions