当前位置: 首页 > news >正文

C++函数签名

函数签名的组成部分

  1. 函数名称
    函数的名字(如 calculateprint)。

  2. 参数列表(Parameter List)

    • 参数的类型、顺序和数量。

    • 参数的名字 不影响 签名(如 int func(int a) 和 int func(int b) 是同一签名)。

  3. 所属的类或命名空间

    • 成员函数属于特定类(如 MyClass::method)。

    • 自由函数属于全局或某个命名空间。

  4. 成员函数的 const/volatile 限定
    例如:void MyClass::method() const 和 void MyClass::method() 是不同签名。

  5. noexcept 说明符(C++11起)
    如 void func() noexcept 和 void func() 是不同签名。

  6. 引用限定符(C++11起)
    如 void func() &(左值引用限定)和 void func() &&(右值引用限定)是不同签名。

不包含在函数签名中的内容

  • 返回类型
    例如:int func() 和 double func() 无法共存(编译器报错)。

  • 默认参数
    默认参数的值不影响签名,但影响函数调用时的行为。

  • 异常规范(C++17 前)
    如 throw()(C++17 后弃用,改用 noexcept)。

函数签名的作用

函数签名的重要性体现在函数重载和模板实例化中。在函数重载时,编译器使用函数签名来判断哪一个函数被调用;在模板实例化时,函数签名帮助确定具体实例化哪一个模板。

函数签名的作用

  1. 函数重载(Overloading)
    通过不同签名区分同名函数:

    int add(int a, int b);          // 签名: add(int, int)
    double add(double a, double b); // 签名: add(double, double)
  2. 模板特化
    函数模板的特化依赖签名匹配:

    template<typename T> void func(T a);    // 主模板
    template<> void func<int>(int a);       // 特化版本
  3. 链接与符号生成
    编译器根据签名生成唯一符号(如 _Z3addii 对应 add(int, int))。

相关文章:

  • 工作的意义,在工作以外的地方
  • 从0到1打造一套适合自己接单的脚手架03用户登录注册
  • 触摸屏触摸坐标与画面对齐
  • 前端性能优化核弹级方案:CSS分层渲染+Wasm,首屏提速300%!
  • MySQL:事务的理解
  • Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
  • 纳米软件矿用电源模块自动化测试方案分享
  • C++中std::allocator基本使用和注意事项
  • powerDesign 逆向 mysql 生成 物理模型,并用VBS脚本整理comment
  • 公司内部建立pypi源
  • 《Vue.js组件化开发实战:从安全纵深到性能跃迁》
  • leetcode刷题日记——三数之和
  • 李白打酒加强版本
  • 简单括号匹配_栈
  • 代码随想录算法训练营第十四天
  • UniApp 实现兼容 H5 和小程序的拖拽排序组件
  • Django项目入门二
  • ShopXO v2.2.4开源商城手动部署(保姆级)+异常处理
  • 分支语句和循环语句
  • 蓝桥杯刷题--宝石组合