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

Xon*_*ara 5 c++

A具有以下原型的功能:

void arryprnt(int[], string, int, string, string);
Run Code Online (Sandbox Code Playgroud)

并定义:

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

而我这样称呼它:

arryprnt(jimmy, "PSEUDOJIMMY: ", 15);
Run Code Online (Sandbox Code Playgroud)

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

Eva*_*ran 22

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

void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".");
Run Code Online (Sandbox Code Playgroud)

并且没有它们的定义:

void arryprnt(int[] a, string intro, int len, string sep, string end) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

顺便说一下:另一方面.通过const引用传递大于int的对象被认为是一种好习惯.虽然这并不适合所有情况,但它适用于大多数情况并避免不必要地复制内容.例如:

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

func("hello world");
Run Code Online (Sandbox Code Playgroud)

  • 如果这不起作用,那么你做错了什么.我不确定会导致这个问题的原因,但这是正确的方法. (2认同)