【发布时间】:2012-03-13 22:47:02
【问题描述】:
我想实现这样的目标:
class C
{
int m_nVal;
public:
C(int nVal) : m_nVal(nVal){}
void foo(int nVal = m_nVal)
{
// use nVal, if provided; otherwise use m_nVal
}
};
C c(1);
c.foo(); // use 1
c.foo(2); // use 2
正如 C++ 标准所说,这是不可能的:
不应在默认参数中使用非静态成员
我的选择是:
(1) 重载foo():
class C
{
int m_nVal;
public:
C(int nVal) : m_nVal(nVal){}
void foo()
{
// use m_nVal
}
void foo(int nVal)
{
// use nVal
}
};
(2) 使用静态成员:
class C
{
static int m_nVal;
public:
void foo(int nVal = m_nVal)
{
// use nVal, if provided; otherwise use m_nVal
}
};
我不想让m_nVal 成为静态成员,所以选项 1 似乎是唯一的一个。
还有其他方法可以实现吗?
【问题讨论】:
-
可以说这就是为设计的重载。
-
只调用 foo() 就 foo(int nval);
-
我猜不能选择使用指针和
nullptr作为默认值?
标签: c++ parameters default-value