默认参数为非静态成员变量
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;
}
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- C++ 静态成员变量 - 文件之间的访问
- 如何在运行时使用静态成员函数初始化静态成员变量
- 模板类中嵌套类的C 静态成员变量
- 如何检查静态成员变量模板?
- 重载运算符和静态成员变量的行为
- 类的静态成员变量(受保护)的作用域
- gcc 和 clang 中 constexpr 静态成员变量的链接器错误
- dll 中静态成员变量的生存期