还有一个关于const关键字在C++中使用的问题(我是C++的新手,试图找到一个答案--太多的答案,但没有找到答案)。
问题1:以下成员职能
template <class T>
bool BinTree<T>::insert( Node<T>* & node, const T& val ) const
{
node = new Node<T>(val);
}我能够更改作为引用传递的类数据。那么成员函数是const呢?这个const只防止数据显式更改,但允许通过引用更改数据,这是真的吗?
func( const Node<T>* const & node ) {...}在此函数签名中,第2- const表示const指针,而第1-st const表示const节点(因此该节点是对const节点的引用)?
发布于 2014-01-17 02:40:15
成员函数是const意味着,就函数而言,this对象( BinTree<T>)是const。(当然,val是const,因为它被标记为const。)(编辑:这有点令人惊讶,因为insert听起来不像您对const树所做的那种函数,因为您无法更新任何内部数据结构。)
您的函数签名是正确的--第一个意思是“指向的东西”是const,第二个意思是指针本身就是const。
根据注释中的进一步讨论进行编辑:函数认为this对象是const,而node是非const。因此,您不能直接更改任何成员变量。但是,如果node恰好是对this成员的引用(假设它是通过
foo.insert(foo.root);然后可以更改特定的成员变量,但只能通过node的别名进行更改。编译器甚至不会注意到两个对象this和node是相关的,因为在它查看函数insert时,它们并不相关(只有在调用实际发生时才会发生混叠)。const只适用于(如果隐含的话) this;任何其他指针或引用都可以执行它们想做的事情。
https://stackoverflow.com/questions/21176836
复制相似问题