C++中结构引用的默认参数
Default argument for structure reference in C++
我想给函数参数一个默认值,它是对结构的引用。我可以给出什么作为默认值?
第一个解决方案:
如果它是对结构的引用,那么您必须使其成为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
指定为参数的默认值。
一个对象(它可以引用它),一个现有的引用。如果您的参数恰好是一个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);
如果传递对象,则可以执行此操作。int rowCount(const QModelIndex &parent = QModelIndex()) const;
执行方式如下:
-
第一步是评估函数内表达式,其中调用对象构造函数并用它初始化引用
-
第二步是执行对象所在的函数体。
-
第三步是转到下一个函数,第一步创建的对象超出了作用域,所以调用了它们的析构函数。
这里甚至不需要const,但大多数编译器都会警告您使用temporal初始化引用。
该解决方案不适用于没有构造函数的类型,int test (int &i=int());
将失败(至少在VisualStudio2008中是error C2440: 'default argument' : cannot convert from 'int' to 'int &'
)
- 如何使用默认参数等选择模板专业化
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 何时提供默认参数作为模板参数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 函数不接受 X 参数,函数使用默认参数
- initializer_list具有默认参数的构造函数
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 为什么C++构造函数在继承中需要默认参数?
- 必须非常量别名参数及其默认参数常量
- C++ 默认参数使用其他参数
- 组合函数参数包和默认参数
- 如何定义 Vector2f 的默认参数?[SFML]
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 如何设置默认参数以防用户不输入另一个参数
- 结构 c++ 中的默认参数
- 构造函数委托与默认参数
- 默认参数和函数指针作为函数参数C++
- 如何在继承层次结构中调用具有默认参数的构造函数?