函数调用默认参数

tzw*_*ckl 4 c++ function-call default-parameters c++11

我写了一篇关于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;
}
Run Code Online (Sandbox Code Playgroud)

我说它不会起作用,但我的教授说它肯定会起作用,因为函数声明中的默认参数.我用MSVC尝试过它并没有用.这是编译器特定的吗?我如何说服我的教授在任何编译器中都不起作用,在考试中提高我的分数?

Seb*_*edl 6

首先,你是对的,教授是错的.事实上,他声称这应该有用(当它表明它不重要时)意味着他可能不应该教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] }
    { }
Run Code Online (Sandbox Code Playgroud)

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