为什么我不能用 auto 初始化一个值并将其传递给一个需要 decltype 作为参数的函数?
让我设置场景,给你看一个小程序。
这是一个返回值的函数。
int Function(void);
在这种情况下,它恰好是一个整数,但返回类型可能会发生变化。
这就是为什么下一个函数编写如下:
void What_I_Take_Depends_On_Function(decltype(Function()) x);
如果有人决定改变 Function 的返回类型,那么这个函数的减速就不需要改变了。是的,函数的定义可能无法正确处理新类型,或者如果函数的返回类型更改为 void 会有问题,但这与我的问题无关。
#include <iostream>
#include <cstdlib>
int Function(void){return 5;}
void What_I_Take_Depends_On_Function(decltype(Function()) x){return;}
int main(){
//assignments(Edit: these are initializations)
int var1 = Function();
auto var2 = Function();
//initializations
int var3 {Function()};
auto var4 {Function()};
What_I_Take_Depends_On_Function(var1); //works
What_I_Take_Depends_On_Function(var2); //works
What_I_Take_Depends_On_Function(var3); //works
What_I_Take_Depends_On_Function(var4); //COMPILER ERROR
//cannot convert ‘std::initializer_list<int>’ to ‘int’ for argument ‘1’ to ‘void What_I_Take_Depends_On_Function(int)’
return EXIT_SUCCESS;
}
那么为什么 var4 是 initializer_list 而不是 int 呢?
不能 auto 只是推断 Function 将返回一个 int,
然后将减速更改为类似于 var3 的减速吗?