在C++函数头中初始化变量

Eva*_*van 5 c++ variables prototype initialization function

我遇到过一些看起来像这样的C++代码(本文简化):

(这是函数原型中的位置someCode.hpp)

void someFunction(const double & a, double & b, const double c = 0, const double * d = 0);
Run Code Online (Sandbox Code Playgroud)

(这里是位于函数体的第一行someCode.cpp#includesomeCode.hpp)

void someFunction(const double & a, double & b, const double c, const double * d);
Run Code Online (Sandbox Code Playgroud)

我可以合法地someFunction使用:

someFunction(*ptr1, *ptr2);
Run Code Online (Sandbox Code Playgroud)

和/或

someFunction(*ptr1, *ptr2, val1, &val2);
Run Code Online (Sandbox Code Playgroud)

其中的变量ptr1,ptr2,val,和val2已经适当定义,val1并且val2不等于零?为什么或者为什么不?

如果它是合法的,这种语法是否优先于重载函数以考虑可选参数?

unw*_*ind 6

是的,这是合法的,这称为默认参数.我会说由于涉及较少的代码而优先考虑重载,是的.

关于您的评论const,这不适用于默认值本身,它适用于参数.如果你有一个类型的参数const char* fruit = "apple",那并不意味着必须用一个字符指针调用它的值与"apple"字符串文字的地址相同(这很好,因为这很难保证).它只是意味着必须使用指向常量字符的指针来调用它,并告诉您被调用的函数不需要写入该内存,它只能从中读取.