const成员函数可以返回一个非const指针指向数据成员吗?

Alc*_*ott 33 c++ const

代码优先:

class A
{
    public:
        ...
        int *foo() const
        {
            return _px;
        }
    private:
        int *_px;
}
Run Code Online (Sandbox Code Playgroud)

成员函数foo返回一个非const的指向private成员的指针_px,我想这会打开修改成员的大门_px,对吧?

foo一个const成员函数?我应该const在返回类型前添加一个吗?

UPDATE

const-member-function应该保证的是,它不能改变任何数据成员,对吧?

在我的例子中,函数foo没有打开修改class A数据成员_px的大门,而是修改_px指向的内容,所以我的问题是,这是否违反了const函数应该保证的内容?

Mik*_*our 33

const成员函数只能一个返回const指针或引用的部件.

但是,您的示例不会返回指向成员的指针; 它正在返回恰好是指针的成员的副本.这在const成员函数中是允许的(即使指针恰好指向另一个成员).

这是不允许的(注意它现在返回一个引用):

int *& foo() const {return _px;}
Run Code Online (Sandbox Code Playgroud)

但这会(返回const参考):

int * const & foo() const {return _px;}
Run Code Online (Sandbox Code Playgroud)


Alo*_*ave 5

int *_px变为int *const _pxconst成员函数内部,这意味着指针不能重新定位,但指向的数据仍然是可修改的.此外,您的函数返回指针的副本,因此无论如何它都无关紧要.


vis*_*tor 5

它并不打开修改之门_px,而是打开_px修改的大门。由您决定是否允许这样做。

例如, aniterator::operator->将返回一个非常量指针,并const_iterator::operator->返回一个常量指针。两种方法本身都可以是 const。