返回信息流#include <iostream>
#include <vector>
using namespace std;
vector<int>&& f(int i) {
vector<int> a = vector<int>();
a.push_back(i);
return move(a);
}
int main() {
vector<int> &&a = vector<int>();
for(int i = 0; i < 10; i++) {
a = f(i);
}
cout<<a.at(0)<<endl;
return 0;
}
没有报错,在我电脑上是死循环
·······································
这样就没错啦
#include <iostream>
#include <vector>
using namespace std;
vector<int> f(int i) {
vector<int> b = vector<int>();
b.push_back(i);
return move(b);
}
int main() {
vector<int> &&a = vector<int>();
for(int i = 0; i < 10; i++) {
a = f(i);
// cout<<i<<endl;
}
cout<<a.at(0)<<endl;
return 0;
}
我的理解是,函数的返回类型不能是引用,否则引用的对象都被销毁了,再引用它就是有问题的啦。
这是一条镜像帖。来源:北邮人论坛 / cpp / #101412同步于 2021/11/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问这段代码有什么问题(找到问题了,应该是函数返回类型的问题
Libertas
2021/11/12镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
并没有报错,在我电脑上是死循环
【 在 huangsiyuan 的大作中提到: 】
: a = f(i);
: 这个a是右值引用变量,变量a其实还是左值,然后把右值赋值给左值非法吧,我也不确定,没太整明白
```C\C++
> cat test.cc
#include <iostream>
#include <vector>
using namespace std;
vector<int>&& f(int i) {
vector<int> a = vector<int>();
a.push_back(i);
return move(a);
}
int main() {
vector<int> &&a = vector<int>();
for(int i = 0; i < 10; i++) {
a = f(i);
}
cout<<a.at(0)<<endl;
return 0;
}
> g++-11 -std=c++2b test.cc -Wall -g -o main; ./main
test.cc: In function 'std::vector<int>&& f(int)':
test.cc:8:16: warning: reference to local variable 'a' returned [-Wreturn-local-addr]
8 | return move(a);
| ~~~~^~~
test.cc:6:17: note: declared here
6 | vector<int> a = vector<int>();
| ^
[1] 58251 segmentation fault ./main
```