我是一些编译 OOP 语言的经验丰富的开发人员,尤其是 Object Pascal 和 C#。多年来一直“搞砸” C++,但最近开始更加认真地对待 C++ 开发。
根据我使用其他语言的经验,我很容易掌握 C++ 中的大多数概念。但是我发现相当困难的一件事是该const
指令的使用方式以及它在 C++ 中的行为方式。
特别是,目前我遇到了这个问题,在 Ubuntu 12.04 机器和默认的 mingW/G++ 工具链上使用 Netbeans C++ IDE 中的TinyXML 库:
我正在调用这个函数:
TiXmlNode::TiXmlNode* FirstChild()
在 TinyXML 源代码中,该函数在类中有两个重载的公共版本TiXmlNode
:
const TiXmlNode* FirstChild() const { return firstChild; }
TiXmlNode* FirstChild() { return firstChild; }
除了 const 指令外,它们是相同的。我假设调用的版本取决于我如何声明从函数加载的变量,例如:
const TiXmlNode* aNode = node->FirstChild();
将调用函数的 const 版本
TiXmlNode* aNode = node->FirstChild();
将调用第二个版本,没有 const。
但是当我尝试在我的代码中使用第二种形式时,我得到一个编译器错误:
错误:从 'const TiXmlNode*' 到 'TiXmlNode*' 的无效转换 [-fpermissive]
为什么会这样?如何使用没有 const 的函数版本?我在这里想念什么?
更多 - 我在哪里可以找到const
C++ 11 中指令用法的一个很好的总结。