gpt4 book ai didi

c++ - decltype(function_name) 的返回类型完全没用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:27 24 4
gpt4 key购买 nike

void foo(int a) {
cout << "Hello" << a << '\n';
}

根据decltype的规则,decltype(foo)的类型应该是"void foo(int)",但似乎我们对此无能为力:

void (& f_ref)(int) = foo;
void (* f_ptr)(int) = foo;


cout<<is_same_v<decltype(foo), decltype(f_ref)><<endl; //return 0
cout<<is_same_v<decltype(foo), decltype(f_ptr)><<endl; //return 0
decltype(foo) df;
df = foo; //error: assignment of function ‘void df(int)’
df = &foo; //error: assignment of function ‘void df(int)’

decltype(foo) df{foo}; //error: function ‘void df(int)’ is initialized like a variable
decltype(foo) df{&foo}; //error: function ‘void df(int)’ is initialized like a variable

最佳答案

两个 is_same_v在您的代码段中被评估为 0因为,嗯,类型不同。

dectype(foo)void (int) (不是 void foo(int) ,名称不是类型的一部分),
这不同于 void (&)(int) ( f_ref 的类型)和 void (*)(int) (f_ptr 的类型)。


这一行:

decltype(foo) df{foo};

不能编译只是因为语法不允许你在函数声明中有初始化器。

即使没有 decltype它不起作用:

void df(int) {foo}; // error: expected ';' before '}' token

尽管您可以创建一个指向 decltype(foo) 的指针:

decltype(foo) *df{foo}; // Becomes `void (*df)(int) {foo};`

这些行:

df = foo;
df = &foo;

不要编译,因为你不能分配给函数。即使 df 也行不通是void df(int); .


如何使用这种类型?

有无数的用途。例如。您可以使用它创建指向此函数的指针,如上所述,或者它可以用作模板参数(用于 std::function 或其他)。

关于c++ - decltype(function_name) 的返回类型完全没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49072216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com