C++重点知识详解(命名空间,缺省参数,函数重载)

命名空间

  • 概念:命名空间是新定义的一个作用域,里面可以放函数,变量,定义类,主要作用是防止命名冲突

  • 实现:

    cpp 复制代码
    namespace _name
    {
        //成员1
        //成员2
        //...
    }

    可以嵌套使用

  • 成员使用:

    cpp 复制代码
    //1、使用时带域名
    域名::成员名
    
    //2、展开某个成员函数的域
    using 域名::成员名   //后续该成员在当前文件可直接使用
    
    //3、展开一整个域
    using namespace 域名;

缺省参数

  • 概念:是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则采用实参
  • 分类:
    • 全缺省参数:所有参数都带缺省值
    • 半缺省参数:部分参数带有缺省值(缺省值必须从右到左依次给出)
  • 注意事项
    • 1、半缺省参数只能从右往左依次给出,不能隔着给
    • 2、不能再声明和定义时同时给出 原因:两个位置如果给的不统一,编译器就不知道该用哪一个
    • 3、缺省参数必须是常用和全局变量,即在编译时要能够明确知道缺省值的内容
    • 4、C语言不支持

函数重载

  • 概念:相同的作用域,函数名相同,参数列表不同(参数列表不同的具体体现参数类型不同,个数不同,以及类型次序不同,与返回值类型无关)

  • 调用原理:函数名相同,编译器如何知道调那个函数?编译期间,编译器通过对实参类型进行推演,根据推演结果找对应的重载函数,如果存在且不会造成二义性则调用否则产出编译错误

    • 二义性产生原因:当有多个候选函数能通过不同的转换路径与调用实参匹配,且这些转换的优先级相同,编译器就无法确定哪一个函数是最佳匹配,二义性问题便由此产生
    cpp 复制代码
    #include <iostream>
    using namespace std;
    
    void func(int x) { cout << "int" << endl; }
    void func(double x) { cout << "double" << endl; }
    
    int main() {
        short s = 10;  // 错误:二义性,short可转换为int或double
        func(s);       // 编译错误:'func': 对重载函数的调用不明确
        return 0;
    }
  • 名字修饰规则:即编译器在编译时对函数名字的改写方式

    • C语言:在函数名字前增加下划线

    • C++:编译器将函数参数的类型放置在函数名字中,来保证函数重载时名字在底层的不同

  • 函数重载的调用是在编译期间 确定的,这一过程被称为静态绑定(或静态多态)。编译器通过以下步骤来确定调用哪个重载函数:

    • 候选函数集识别:编译器会先找出所有同名函数,这些函数被称为候选函数
    • 可行函数筛选:从候选函数中筛选出参数数量和类型都合适的可行函数
    • 最佳匹配选择:依据实参与形参的匹配程度,从可行函数中选出最佳匹配的函数
    • 错误检查:如果找不到匹配的函数,或者有多个同等匹配的函数,编译器就会报错
相关推荐
凡人叶枫33 分钟前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
Qt程序员39 分钟前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean43 分钟前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务
LabVIEW开发1 小时前
LabVIEW + MATLAB 混合编程:爆炸场测试数据精准采集方案
开发语言·matlab·labview
嵌入式协会20240721 小时前
(已解决)MinIO python 获取预签名出现forbidden、errornetwork等错误
java·开发语言·python
宸丶一1 小时前
Day 14:任务追踪 - 让 Agent 拥有项目管理能力
开发语言·python
小短腿的代码世界1 小时前
Qt行情协议解析与二进制编解码优化:从FIX到自定义协议的全链路架构
开发语言·qt·架构
skylar02 小时前
小白1分钟安装flash-attn
开发语言·python
默子昂2 小时前
ollama 自定义ui
开发语言·python·ui
坚果派·白晓明2 小时前
【鸿蒙PC】SDL3 移植:AtomCode Skills 4 步速通多媒体库适配
c++·华为·ai编程·harmonyos·atomcode·c/c++三方库