[英]Default argument for structure reference in C++
我想为 function 参数提供默认值,该参数是对结构的引用。 我可以给出什么作为默认值?
第一个解决方案:
如果它是对结构的引用,那么您必须将其设为const
引用,并执行以下操作:
struct A
{
//etc
A(int, int);
};
void f(int a, const A & = A(10,20) ) //const is necessary
{
//etc
}
由于显而易见的原因,它并不是那么好:它使参数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
}
还是不好。 定义一个全局变量不是一个好主意。
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);
}
现在它不需要您制作参数const
,也不会强制您在结构中使用构造函数。
这适用于 C++0x:
#include <iostream>
struct structure { int x, y ; } ;
int f(int a, structure &s = structure{10,20}) {
return s.x + s.y ;
}
int main() {
std::cout << f (99) << std::endl ;
}
请注意, s
不必是const
。 见http://ideone.com/sikjf 。
你不能那样做。
所有引用必须在声明时初始化。 引用只是变量的另一个名称。 因此,您不能为引用其他变量的参数分配默认值。
如果你必须这样做,你可以使用指针来代替。 在这种情况下,您可以将0
指定为参数的默认值。
一个 object(它可以参考),一个现有的参考。 如果您的参数恰好是 const 引用,则表达式会导致该类型。
为了显示:
struct X
{
X operator+(const X&) const;
};
X x1;
X& x2;
void f(X& x = x1);
void f(X& x = x2);
void f(const X& x = x1 + x1);
如果您通过 object,您可以这样做。 int rowCount(const QModelIndex &parent = QModelIndex()) const;
以这种方式执行:
第一步是评估函数内表达式,其中调用 object 构造函数并用它初始化引用。
第二步是执行 function 主体,其中 object 存在。
第三步是下一步 function,第一步创建的对象用完了 scope,所以调用了它们的析构函数。
即使 const 在这里也不是必需的,但是大多数编译器都会警告您使用临时初始化引用。
该解决方案不适用于没有构造函数的类型int test (int &i=int());
将失败(至少在 VisualStudio 2008 上error C2440: 'default argument': cannot convert from 'int' to 'int &'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.