C++中结构引用的默认参数

Ran*_*tha 5 c++

我想给函数参数赋一个默认值,该参数是对结构的引用.我可以提供什么作为默认值?

Naw*_*waz 17

第一解决方案

如果它是对结构的引用,那么你必须使它成为const引用,并执行以下操作:

struct A
{
    //etc
    A(int, int);
};  

void f(int a, const A & = A(10,20) ) //const is necessary
{
    //etc
}
Run Code Online (Sandbox Code Playgroud)

由于显而易见的原因,它并没有那么好:它产生参数const(你可能不需要它),你的结构需要有构造函数(你可能没有它).

二解决方案:

因此,如果您不想创建它const,或者如果您不想在结构中使用构造函数,那么您可以这样做:

struct Point
{
     int x, y, z;
};  

Point g_default_point = {10,20,30};
void g(int a, Point & p = g_default_point )
{
    //etc
}
Run Code Online (Sandbox Code Playgroud)

仍然不好.定义全局变量不是一个好主意.


最佳解决方案:定义过载功能

void g(int a, Point & p)
{
    //your code
}
void g(int a) //this function would behave as if you opt for default value!
{
     Point default_value = {10,20,30};
     g(a, default_value);
}
Run Code Online (Sandbox Code Playgroud)

现在它不需要你创建参数const,它也不会强迫你在你的struct中有构造函数.

  • 对不起,但这不完全正确.问题不是谈论const引用,而是非const引用(至少我是如何理解的) (2认同)

Don*_*alo 0

你不能那样做。

所有引用都必须在声明时初始化。引用只是变量的另一个名称。因此,您不能为引用其他变量的参数分配默认值。

如果必须这样做,可以使用指针代替。在这种情况下,您可以0为参数指定默认值。