const成员函数可以将非const指针作为返回值吗?
先给出一段代码
class A
{
int *x;
public:
int *f() const { return x; }
};
成员函数f
返回指向私有成员 x
的非常量指针,我认为这会修改成员x
,对吧?
f
是 const
成员函数,我应该在返回类型前面添加 const
吗?
const
成员函数应该保证的是,它不能更改任何数据成员。
就我而言,函数 f
并没有修改类A
的数据成员x
,但可以修改x
指向的内容,所以我的问题是,这是否违反了const
函数应保证的内容?
回答:
const
成员函数只能返回 指向成员的const
指针或引用。
但是,您的示例未返回指向成员的指针;它返回的恰好是指针成员的副本。在 const
成员函数中允许这样做(即使指针碰巧指向另一个成员)。
这将不会被允许(请注意,它现在正在返回引用):
int *&f() const { return x; }
但这可以(返回 const
引用):
int *const &f() const { return x; }