每日 C++ - Const 函数

    科技2026-03-07  9

    介绍

    这节主要探究类的 const 函数的可调用关系,首先先说明下什么是 const 函数,如下形式:

    std::string getName() const { return name; }

    我们来看下面这个类

    #ifndef __CONSTA_H_INCLUDE__ #define __CONSTA_H_INCLUDE__ class ConstA { public: ConstA() : x(1), p(&x), xx(1), pp(&xx) { } int a(); const int b(); int c() const; const int d() const; private: const int x; int xx; const int *p; int* const pp; }; int ConstA::a() { return x; } const int ConstA::b() { return *p; } int ConstA::c() const { return xx; } const int ConstA::d() const { return *pp; } #endif // __CONSTA_H_INCLUDE__

    然后我们在 main 函数中定义两个对象 ConstA ca 和 const ConstA ca

    int main() { ConstA ca; const ConstA ca2; std::cout << ca.a() << std::endl; std::cout << ca.b() << std::endl; std::cout << ca.c() << std::endl; std::cout << ca.d() << std::endl; std::cout << "************************" << std::endl; std::cout << ca2.a() << std::endl; std::cout << ca2.b() << std::endl; std::cout << ca2.c() << std::endl; std::cout << ca2.d() << std::endl; return 0; }

    这时我们发现 ca2 无法调用 a() 和 b(),需要进行一定的转换,const_cast<ConstA&>(ca2).a() 或 const_cast<ConstA&>(ca2).b()。

    const 函数与非 const 函数的调用规则

    const 对象默认调用 const 成员函数,非 const 对象默认调用非 const 成员函数;

    若非 const 对象想调用const成员函数,则需要显示的转化,例如(const ConstA&)ca.d();

    若 const 对象想调用非const成员函数,同理进行强制类型转换 const_cast<ConstA&>(ca2).a();

    非 const 对象可以调用非 const 成员函数,也可调用 const 成员函数;

    const 对象仅可以调用 const 成员函数,如果直接调用非 const 成员函数则编译器会报错。

    Processed: 0.027, SQL: 9