![](/img/trans.png)
[英]Is it allowed to call a non-static member function in a default member initializer?
[英]Default arguments as non-static member variables
我想创建一个类,它有两个整数成员变量,以及一个有两个可选参数的函数。 如果提供了这些参数,则函数返回它们的总和; 如果未提供这些参数,则该函数返回其两个成员变量的总和。
这是代码:
class Foo
{
private:
int x_;
int y_;
public:
Foo(int x, int y) : x_(x), y_(y){}
int Bar(int a = x_, int b = y_)
{
int z = a + b;
return z;
}
};
但是,我收到以下编译错误:
invalid use of non-static data member 'Foo::x_'
int x_;
^
invalid use of non-static data member 'Foo::y_'
int y_;
^
这表明成员变量必须是静态的,才能将它们用作函数中的默认参数。 但我不希望它们是静态的......
解决办法是什么?
超载Bar
:
int Bar()
{
return x_ + y_;
}
int Bar(int x)
{
return x + y_;
}
int Bar(int x, int y)
{
return x + y;
}
感谢@ Jarod42的改进:
int Bar(int a, int b)
{
return a + b;
}
int Bar(int a)
{
return Bar(a, y_);
}
int Bar()
{
return Bar(x_, y_);
}
你试图解决的现实世界问题更有可能从这个重构中受益,而不是总结两个数字的原始问题。 这种行为更明显地与您希望通过默认参数实现的行为相同。
解决方法是将Bar
函数重载为:
int Bar()
{
return x_ + y_;
}
int Bar(int a)
{
return a + y_;
}
int Bar(int a, int b)
{
return a + b;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.