首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const成员函数如何更改对象的数据?

const成员函数如何更改对象的数据?
EN

Stack Overflow用户
提问于 2014-01-17 02:34:07
回答 1查看 2.3K关注 0票数 2

还有一个关于const关键字在C++中使用的问题(我是C++的新手,试图找到一个答案--太多的答案,但没有找到答案)。

问题1:以下成员职能

代码语言:javascript
复制
template <class T>  
bool BinTree<T>::insert( Node<T>* & node, const T& val ) const  
{
    node = new Node<T>(val);
}

我能够更改作为引用传递的类数据。那么成员函数是const呢?这个const只防止数据显式更改,但允许通过引用更改数据,这是真的吗?

  1. 你能证实我的理解吗:

代码语言:javascript
复制
func( const Node<T>* const & node ) {...}

在此函数签名中,第2- const表示const指针,而第1-st const表示const节点(因此该节点是对const节点的引用)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-17 02:40:15

成员函数是const意味着,就函数而言,this对象( BinTree<T>)是const。(当然,val是const,因为它被标记为const。)(编辑:这有点令人惊讶,因为insert听起来不像您对const树所做的那种函数,因为您无法更新任何内部数据结构。)

您的函数签名是正确的--第一个意思是“指向的东西”是const,第二个意思是指针本身就是const。

根据注释中的进一步讨论进行编辑:函数认为this对象是const,而node是非const。因此,您不能直接更改任何成员变量。但是,如果node恰好是对this成员的引用(假设它是通过

代码语言:javascript
复制
foo.insert(foo.root);

然后可以更改特定的成员变量,但只能通过node的别名进行更改。编译器甚至不会注意到两个对象thisnode是相关的,因为在它查看函数insert时,它们并不相关(只有在调用实际发生时才会发生混叠)。const只适用于(如果隐含的话) this;任何其他指针或引用都可以执行它们想做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21176836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档