我对复制仿函数和/或初始化程序时会发生什么感到有些困惑。在下面的代码中,我认为我会一直复制/移动对象,但不管它是 Segfaults。我似乎做错了什么,但还没有弄清楚我的错误假设是什么。奇怪的是,在cppreference.com我找不到复制或移动构造函数,initializer_list
所以我想知道在这些情况下实际发生了什么。
#include <string>
#include <vector>
#include <functional>
#include <iostream>
std::initializer_list<std::function<std::string()>> getInitializer() {
return {
[]() -> std::string {
return "If";
}
};
}
int main() {
std::function<int(std::string)> func;
{
auto init = getInitializer();
func = [init](std::string text) -> int {
std::vector<std::function<std::string()>> vec(init);
for( auto& el : vec ) {
std::cout << el();
}
std::cout << text << std::endl;
return 5;
};
}
return func(" you see this - the world is all right!");
}