gpt4 book ai didi

c++ - 带默认参数的函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:25 24 4
gpt4 key购买 nike

我写了一篇关于 C++ 编程的考试。有一个问题我和我的教授不同意。问题是,以下功能是否有效:

#include <iostream>
using namespace std;

void f(int=4, long=10, double=3.14);

int main( int argc , char ** argv )
{
f( , ,8);
return EXIT_SUCCESS;
}

void f(int i, long l, double d) {
cout << i << " " << " " << l << " " << d;
}

我说不行,我教授说肯定行,因为函数声明中有默认参数。我用 MSVC 试过了,但没有用。那是特定于编译器的吗?我如何才能说服我的教授它在任何编译器中都不起作用,从而在考试中提高我的分数?

最佳答案

首先,你是对的,教授是错的。事实上,他声称这应该有效(当证明它无效时微不足道)意味着他可能不应该教授 C++。但是怎么给他看呢?

只需尝试使用至少两个不同的编译器对其进行编译即可。如果两者都无法编译它,那么它很可能不是有效代码。这是最快的方法。

如果失败,请引用 C++ 标准。下面是调用表达式的语法,如 [expr.post]p1 中所述并遵循非终端引用:

postfix-expression:
...
postfix-expression ( expression-list[opt] )

expression-list:
initializer-list

initializer-list: ([dcl.init]p1)
initializer-clause ...[opt]
initializer-list , initializer-clause ...[opt]

initializer-clause:
assignment-expression
braced-init-list

braced-init-list:
{ initializer-list ,[opt] }
{ }

我不打算列出赋值表达式,但请注意,表达式永远不可能是空的,必须至少有一个标记。这意味着初始化子句永远不可能是空的,因此函数参数中的逗号之间总是必须有一些东西。

关于c++ - 带默认参数的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698813/

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