【发布时间】:2018-02-14 20:13:32
【问题描述】:
您能解释一下为什么这段代码会崩溃吗?我希望输出“a”,但出现分段错误。
#include <functional>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct MyStruct {
vector<string> a;
vector<string> b;
};
void out_data(const MyStruct& my_struct, const std::function<const vector<string>&(const MyStruct&)> getter) {
cout << getter(my_struct)[0] << endl;
}
int main(int argc, char** argv)
{
MyStruct my_struct;
my_struct.a.push_back("a");
my_struct.b.push_back("b");
out_data(my_struct, [](const MyStruct& in) {return in.a;});
return 0;
}
【问题讨论】:
-
可能是因为 lambda 按值而不是按引用返回向量。
-
如果你看到自己曾经返回一个引用,问问自己“我所指的那个对象在哪里生活”?如果你不能回答,你不应该这样做。
-
请启用警告。您的编译器可能对您大喊这是一个坏主意。