“C++ Primer”一书第7.6章指出:
非静态数据成员不能用作默认参数,因为它的值是它所属对象的一部分。使用非静态数据成员作为默认参数不提供从其中获取成员值的对象,因此是错误的。
成员函数可以访问类成员,那么当成员函数使用默认参数时,为什么会出现问题呢?
发布于 2021-10-20 09:38:17
简单的回答是:没有先验的理由可以解释为什么它是不可能的,但是在C++中没有机制(至少不是直接的)。
默认参数将在调用站点中替换。例如
void foo(int x = 42);然后
foo();实际上是
foo(42);对于非静态成员,这是行不通的:
struct bar {
int y;
void moo(int x = y);
};
bar b;
b.moo(); // -> b.moo(y) ?!?默认参数在调用站点被替换,这不一定在类的范围内。在类的作用域之外,您需要一个实例来访问一个成员。
当然,可以有规则使它工作,但C++只是说你不能这样做。但是,您不需要它,因为有一个简单的解决方法:
struct bar {
int y;
void moo(int x);
void moo() { moo(y); }
};https://stackoverflow.com/questions/69643587
复制相似问题