C ++调用具有相同签名但范围不同的方法

这个问题在这里已经有了答案:

  • C ++方法声明中最后一个“const”的含义? 7个答案

  • 函数可以根据它们的const单独重载。 这是C ++的一个重要特性。

    // const member function:
    const XMLAttribute* FindAttribute( const char* name ) const;
    
    // non-const member function
    XMLAttribute* FindAttribute( const char* name );
    

    在这种情况下, const ,使功能不同的是const以下括号。 括号之前的const不属于方法签名,而括号后面的const却是。 后者的const用法指定哪些成员函数可以从const对象中调用,哪些不可以。 换句话说,它指定了const对象的约定。

    如果你有一个const对象, const方法将被调用:

    const MyObject cObj;
    cObj.FindAttribute("cats");
    // const method will be called
    

    如果你有一个非const对象,编译器会寻找一个非const方法并调用它。 如果它不存在,它会查找一个const方法并调用它。 编译器以这种方式工作,因为它是合法的调用const从非成员函数const对象,但它是非法的调用非const从成员函数const对象。

    MyObject obj;
    obj.FindAttribute("cats");
    // non-const method will be called
    // if it does not exist the compiler will look for a const version
    

    我对如何在公共和私人范围内具有相同的签名感到困惑。

    他们实际上没有相同的签名

    const XMLAttribute* FindAttribute( const char* name ) const;
                                                       // ^^^^^^
    

    公共方法适用于const对包含类的访问。 这是计数函数签名的唯一性。

    链接地址: http://www.djcxy.com/p/40425.html

    上一篇: C++ Calling methods with same signature but different scope

    下一篇: const parameter in function prototype