C++中的引示调用和显示调用

1. 隐式调用(Implicit Invocation)

  • 定义:编译器在特定场景下自动插入的函数调用,无需程序员显式写出调用代码。

  • 常见场景

    • 构造/析构函数:对象创建/销毁时自动调用。

    • 类型转换:隐式类型转换触发转换函数(如 operator T())。

    • 运算符重载:使用运算符(如 +=)时自动调用对应函数。

    • 拷贝/移动语义:传递对象时自动调用拷贝/移动构造函数。

      class MyClass {
      public:
          MyClass() { std::cout << "构造函数隐式调用\n"; }
          ~MyClass() { std::cout << "析构函数隐式调用\n"; }
          operator int() const { return 42; } // 隐式类型转换
      };
      
      int main() {
          MyClass obj;      // 隐式调用构造函数
          int num = obj;    // 隐式调用 operator int()(类型转换)
          return 0;         // 作用域结束,隐式调用析构函数
      }
      构造函数隐式调用
      析构函数隐式调用

      2. 显式调用(Explicit Invocation)

    • 定义:程序员主动编写代码直接调用函数或操作。

    • 常见场景

      • 直接调用成员函数:obj.func()

      • 使用 new/delete 手动管理内存。

      • 强制类型转换(如 static_cast)。

        class Calculator {
        public:
            int add(int a, int b) { return a + b; }
        };
        
        int main() {
            Calculator calc;
            int result = calc.add(3, 4); // 显式调用 add 函数
            std::cout << result;          // 输出 7
            return 0;
        }

        关键区别总结

        特性隐式调用显式调用
        触发方式编译器自动插入程序员手动编写代码
        代码可见性无直接调用代码有明确的调用语句(如 func()
        典型场景构造/析构、类型转换、运算符重载普通函数调用、手动资源管理
        控制权由编译器控制由程序员控制
        explicit 关键字用于禁止隐式转换(如 explicit Constructor不适用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值