以下代码无法使用带有选项的 g++ 版本 5.4.0 进行编译-std=c++1y
:
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 few arguments to function
在任一标准修订版中,在两个GCC 7.2 http://coliru.stacked-crooked.com/a/84ae0c00a92db73b and GCC 6.3 https://ideone.com/0LnWRE.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)