在std :: function中返回初始化列表而不是向量

Hum*_*awi 6 c++ vector initializer-list c++11 std-function

编辑:它不是重复的链接问题(也是我的).这里所有的返回类型都是std::vector.我不想退货initializer-list.我想直接填写返回 std::vectorinitializer-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::functioninitializer-list

nwp*_*nwp 4

auto bar=[]()->std::vector<int>{将 lambda 的返回类型指定barstd::vector<int>

std::function<std::vector<int>()> foo=[](){不指定 的返回类型foo,因为您首先推导出 lambda 的返回类型,然后对其进行赋值。

C++ 在决定类型时不会考虑您可以将 lambda 分配给什么,它会看到 return {1},这是一个std::initializer_list<int>,它与 a 不兼容std::function<std::vector<int>>