如何使用具有默认值的参数创建函数原型?

时间:2009-05-31 03:34:09

标签: c++

A具有原型的功能:

void arryprnt(int[], string, int, string, string);

定义:

void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".") {
// stuff
}

我这样称呼它:

arryprnt(jimmy, "PSEUDOJIMMY: ", 15);

...当我调用arryprnt时,我得到一个编译器错误,说我根据原型所说的使用了太少的参数。 “好的,”我在想,“编译器不知道某些arryprnt的参数有默认值。我只是将参数从定义复制到原型中。”然而,我做了一个编译器错误告诉我,我用太多参数调用arryprnt!我可以只显式指定所有参数,但有没有办法在不指定所有参数的情况下调用它?

2 个答案:

答案 0 :(得分:22)

您应该将默认参数放在原型中,而不是像这样的定义:

void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".");

并在没有它们的情况下进行定义:

void arryprnt(int[] a, string intro, int len, string sep, string end) {
    // ...
}
顺便说一句:另一方面。通过 const reference 传递大于int的对象被认为是一种好习惯。虽然这不适合所有情况,但它适用于大多数情况并避免不必要地复制内容。例如:

void func(const std::string &s) {
    // do some read-only operation with s.
}

func("hello world");

答案 1 :(得分:-1)

不确定这是否仍然相关,但是下面的代码工作正常。

原型:

void arryprnt(int[], string, int, string = ", ", string=". ");

定义:

void arryprnt(int a[], string intro, int len, string sep, string endd)
//stuff

当函数有默认参数时,最好是在原型中声明它们,而不是在函数定义中声明它们。下面的代码没有用,

原型:

void arryprnt(int[], string, int, string = ", ", string=". ");

定义:

void arryprnt(int a[], string intro, int len, string sep = ", ", string endd = ". ")
//stuff