【发布时间】:2011-05-31 04:16:18
【问题描述】:
struct X
{
X():mem(42){}
void f(int param = mem) //ERROR
{
//do something
}
private:
int mem;
};
谁能告诉我为什么这在 C++ 中是非法的?!也就是说,我知道这是一个错误,我知道这个错误是什么意思,我就是不明白为什么这会是非法的!
【问题讨论】:
-
@marcog:虽然我可能同意这有点相关,但我相信这根本不是重复的......
-
@Armen 那里接受的答案在一定程度上回答了您的问题:编译器在解析默认参数时不知道该实例。
-
不适用于静态成员函数,因为数据成员不能是虚拟的,所以对于实例方法来说非常模糊。解决方法对于过载来说是微不足道的。
-
@Armen 我认为期望它起作用是合理的,我看不出语言方面的原因。 “在编译时需要知道默认参数”不是我认为的原因。在上面的代码中,默认参数 在编译时是已知的——它是对成员
some_member_variable的类std::string的.size()的调用。这就是所有需要的。重载解析是在不考虑默认参数的情况下完成的(否则我们会有循环依赖)。所以当我们替换默认参数时,我想我们知道我们需要触摸哪个对象的成员。 -
更新:@user396672 提供了一个有见地的语言原因。
标签: c++ default-value member-functions