代码优先:
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)
int *_px变为int *const _pxconst成员函数内部,这意味着指针不能重新定位,但指向的数据仍然是可修改的.此外,您的函数返回指针的副本,因此无论如何它都无关紧要.
它并不打开修改之门_px,而是打开_px修改的大门。由您决定是否允许这样做。
例如, aniterator::operator->将返回一个非常量指针,并const_iterator::operator->返回一个常量指针。两种方法本身都可以是 const。
| 归档时间: |
|
| 查看次数: |
12299 次 |
| 最近记录: |