Loading

const成员函数可以将非const指针作为返回值吗?

先给出一段代码

class A
{
    int *x;

public:
    int *f() const { return x; }
};

成员函数f返回指向私有成员 x 的非常量指针,我认为这会修改成员x ,对吧?

fconst成员函数,我应该在返回类型前面添加 const 吗?

const成员函数应该保证的是,它不能更改任何数据成员。

就我而言,函数 f 并没有修改类A 的数据成员x ,但可以修改x 指向的内容,所以我的问题是,这是否违反了const函数应保证的内容?

回答:

const 成员函数只能返回 指向成员的const指针或引用。

但是,您的示例未返回指向成员的指针;它返回的恰好是指针成员的副本。在 const 成员函数中允许这样做(即使指针碰巧指向另一个成员)。

这将不会被允许(请注意,它现在正在返回引用):

int *&f() const { return x; }

但这可以(返回 const引用):

int *const &f() const { return x; }
posted @ 2021-02-16 16:46  橘崽崽啊  阅读(193)  评论(0编辑  收藏  举报