gpt4 book ai didi

c++ - 如何通过指向另一个函数返回的函数的指针调用具有默认参数的函数?

转载 作者:IT老高 更新时间:2023-10-28 21:45:50 24 4
gpt4 key购买 nike

我有函数 Mult、Add、Div、Sub、Mod 接受两个整数并返回其参数的结果。还有一个函数Calc,它将一个字符作为Operator,并返回一个指向函数的指针,该函数返回一个整数并接受两个整数参数,如Mult

  • Mult之类的函数第二个参数是default 所以当我调用Calc时,Calc返回地址MultAdd... 取决于 Calc 的参数值,因此我只能传递一个参数。

但它不适用于指向函数的指针:

int Add(int x, int y = 2) { // y is default
return x + y;
}

int Mult(int x, int y = 2) { // y is default
return x * y;
}

int Div(int x, int y = 2) { // y is default
return y ? x / y : -1;
}

int Sub(int x, int y = 2) { // y is default
return x - y;
}

int Mod(int x, int y = 2) { // y is default
return y ? x % y : -1;
}

using pFn = int(*)(int, int);


pFn Calc(char c) {
switch (c) {
case '+':
return Add;
case '*':
return Mult;
case '/':
return Div;
case '-':
return Sub;
case '%':
return Mod;
}
return Mult;
}

int main(int argc, char* argv[]){

pFn func = Calc('%');
cout << func(7, 4) << endl; // ok
//cout << func(7) << endl; // error: Too few arguments
cout << Mult(4) << endl; // ok. the second argument is default

func = Calc('/'); // ok
cout << func(75, 12) << endl; // ok

std::cout << std::endl;
}

如果我用单个参数调用 Mult 它可以正常工作,因为第二个参数是默认的,但通过指针 func 调用它会失败。 func 是指向函数的指针,该函数接受两个整数并返回一个 int。

最佳答案

默认参数有点像 C++ 语法糖;当使用不足的参数直接调用函数时,编译器会插入默认值,就好像调用者已显式传递它一样,因此仍会使用完整的参数调用函数(Mult(4) 被编译为在这种情况下与 Mult(4, 2) 的代码相同)。

默认值实际上并不是函数类型的一部分,因此您不能将默认值用于间接调用;语法糖在那里分解,因为一旦您通过指针调用,有关默认值的信息就会丢失。

关于c++ - 如何通过指向另一个函数返回的函数的指针调用具有默认参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716044/

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