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++:编译器将函数参数的类型放置在函数名字中,来保证函数重载时名字在底层的不同

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

    • 候选函数集识别:编译器会先找出所有同名函数,这些函数被称为候选函数
    • 可行函数筛选:从候选函数中筛选出参数数量和类型都合适的可行函数
    • 最佳匹配选择:依据实参与形参的匹配程度,从可行函数中选出最佳匹配的函数
    • 错误检查:如果找不到匹配的函数,或者有多个同等匹配的函数,编译器就会报错
相关推荐
欧特克_Glodon5 小时前
OpenCV计算机视觉开发入门与实践<二十七>:图像分割概述
c++·人工智能·opencv·计算机视觉
蒸蒸yyyyzwd5 小时前
cpp 选手秋招学习笔记 day21
c++·面试·八股
Interview Aid1125 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
CoderIsArt12 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源15 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
「QT(C++)开发工程师」16 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F16 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin52112316 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F16 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++