看了Tinyxml的代码
发现有下面两句代码
const TiXmlNode* FirstChild() const { return firstChild; }
TiXmlNode* FirstChild() { return firstChild; }
我想问下 这个两句代码有啥区别,如果调用FirstChild方法,调用的是哪一个呢?

解决方案 »

  1.   

    一个返回常量指针,一个返回普通指针:Tinyxml * pXml = ...;
    TiXmlNode      * ptr; 
    const TiXmlNode* ptr_const;ptr       = pXml->FirstChild();//调用TiXmlNode* FirstChild() 
    ptr_const = FirstChild() ;//调用const TiXmlNode* FirstChild() const 
      

  2.   

    假设你的类名叫Child,则:
    void play(Child& cd);//调用第二个版本
    void play(const Child& cd);//调用第一个版本
      

  3.   

    const类型的对象调用第一个  不能修改  firstChild的值
    非const类型对象调用第二个
      

  4.   

    那么编译过程中 这两个函数在obj文件中的符号应该不同吧 应该是什么呢
      

  5.   

    在obj文件中是类似于?FirstChild@@YAXH@Z这种形式
      

  6.   

    两个函数分别对应两种类型的对象指针,当对象指针为const类型时,由于不能修改对象中的数据,所以只能返回const类型的数据指针。例如:
    // const Tinyxml* p1;
    // Tinyxml* p2;
    p1->FirstChild()调用的是前一个函数
    p2->FirstChild()调用的是后一个函数
      

  7.   

    FirstChild() const { return firstChild; }这里的const表示,此成员函数不能修改类对象里的成量变量,只能访问。
      

  8.   

    那编译后的符号呢 是不是也加上了const标志呢?