Hum*_*awi 6 c++ vector initializer-list c++11 std-function
编辑:它不是重复的链接问题(也是我的).这里所有的返回类型都是
std::vector.我不想退货initializer-list.我想直接填写返回std::vector的initializer-list
让我们来看看这四个案例:
1)
//Acceptable
std::vector<int> foo(){
return std::vector<int>{1};
}
Run Code Online (Sandbox Code Playgroud)
2)
//Acceptable
std::vector<int> foo(){
return {1};
}
Run Code Online (Sandbox Code Playgroud)
3)
//Acceptable
std::function<std::vector<int>()> foo=[](){
return std::vector<int>{1};
};
Run Code Online (Sandbox Code Playgroud)
4)
//NOT Acceptable
std::function<std::vector<int>()> foo=[](){
return {1};
};
Run Code Online (Sandbox Code Playgroud)
为什么4不可接受,因为2是可以接受的?他们之间有什么不同?而且,这是可以接受的最奇怪的事情:
//Acceptable
auto bar=[]()->std::vector<int>{
return {1};
};
Run Code Online (Sandbox Code Playgroud)
什么是错的std::function和initializer-list?
auto bar=[]()->std::vector<int>{将 lambda 的返回类型指定bar为std::vector<int>。
std::function<std::vector<int>()> foo=[](){不指定 的返回类型foo,因为您首先推导出 lambda 的返回类型,然后对其进行赋值。
C++ 在决定类型时不会考虑您可以将 lambda 分配给什么,它会看到 return {1},这是一个std::initializer_list<int>,它与 a 不兼容std::function<std::vector<int>>。