我对复制函数对象和/或初始化程序的操作机制有些困惑。在下面的代码中,我认为我会一直复制/移动对象,但无论如何它都会发生段错误。我似乎做错了什么,但还没有搞清楚我的错误假设是什么。
奇怪的是,在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!");
}
using
语句呢? - Cole Tobinusing
有什么用? - abergmeierusing namespace std;
可以避免每次都要输入std::
。详情请参考:http://msdn.microsoft.com/zh-cn/library/aewtdfs3(v=vs.100).aspx - Cole Tobin