CPP参考手册中提到"除非用于构成成员指针或在成员访问表达式中使用",能否对应那句话举一个默认实参中使用非静态类成员的例子
时间: 2024-03-05 13:51:30 浏览: 18
非常抱歉,我之前的回答中存在错误。在 C++ 中,类成员变量不能用于函数的默认参数中,而且类成员变量也不能用于成员函数指针或成员访问表达式中。
这是因为,类成员变量的值是需要依赖类的对象才能确定的,而默认参数的值是在编译期间确定的。因此,不能使用类成员变量作为默认参数。
关于“除非用于构成成员指针或在成员访问表达式中使用”的说明是指,如果需要使用类成员变量的地址或者需要访问类成员变量的值,可以使用成员指针或成员访问表达式。具体示例代码如下:
```c++
#include <iostream>
using namespace std;
struct Foo {
int x;
int y;
int myFunc(int Foo::*p = &Foo::x) { // 成员指针作为默认参数
return this->*p;
}
};
int main() {
Foo f;
f.x = 10;
f.y = 20;
cout << f.myFunc() << endl; // 输出结果为 10
cout << f.myFunc(&Foo::y) << endl; // 输出结果为 20
return 0;
}
```
在上述代码中,`myFunc` 函数的参数使用了成员指针 `p`,默认值为 `&Foo::x`,即类成员变量 `x` 的地址。在 `myFunc` 函数内部,使用 `this->*p` 访问了类成员变量的值。在 `main` 函数中,我们创建了一个 `Foo` 类的对象 `f`,并分别调用了 `myFunc` 函数,不传递实参和传递实参 `&Foo::y`,输出结果分别为 `10` 和 `20`。