gpt4 book ai didi

c++ - 取消引用具有默认参数的函数 - C++14 与 C++11

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

以下代码无法使用带有选项 -std=c++1y 的 g++ 5.4.0 版进行编译:

void f(int=0) ;

int main() {
f(); // ok
(*f)(2);// ok
(*f)();// ok c++11; error with c++14: too few arguments to function
return 0;
}

声明为具有默认参数的函数,那么这里有什么问题?感谢您的帮助。

为什么 g++ -c -std=c++11 会编译?

最佳答案

接受 (*f)() 为有效是 GCC 错误。标准的字母表示使用带有一元 * 的函数名应该导致函数名衰减为指针。然后应该取消引用指针以获得调用表达式的函数地址。

但 GCC 似乎很聪明,并且省略了上述行为。它将 (*f) 简单地视为 f。并且可以使用默认参数调用 f

但是,可以强制 GCC 进行衰减。应用于函数名的一元 + 会将其强制衰减为指针。所以下面两个:

(+f)();
(*+f)();

导致 GCC 在任一标准修订版中发出 error: too little arguments to function,在两个 GCC 7.2 中和 GCC 6.3 .

关于c++ - 取消引用具有默认参数的函数 - C++14 与 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47013385/

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