• C++第一篇--关键字以及命名空间



    📙 作者简介 :RO-BERRY
    📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
    📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


    请添加图片描述


    🎄 前言

    C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助,本章节主要目标:

    1. 补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的,比如:作用
      域方面、IO方面、函数方面、指针方面、宏方面等。
    2. 为后续类和对象学习打基础

    1. C++关键字(C++98)

    C++总计63个关键字,C语言32个关键字
    ps:下面我们只是看一下C++有多少关键字,不对关键字进行具体的讲解。后面我们学到以后再细讲。
    在这里插入图片描述

    2. 命名空间

    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的


    先来写一段简单C++代码
    进入一个语言世界肯定是从hello world开始啦
    作为对比先来C语言版本的:

    #include
    int main()
    {
        printf("hello world");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    再来看C++版本

    
    #include
    using namespace std;
    int main()
    {
        cout<<"hello world"<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们都知道在C语言文件中源文件后缀都是.c
    但是在.cpp文件里,这两个代码都可以运行
    输出结果都是
    hello world
    可是我们的头文件以及输出方式却完全不一样
    C++首先兼容C语言的知识,C语言的知识在C++都可以用
    C++还有面向对象,泛型以及对C语言不足的弥补

    接下来我们正式介绍C++语言的基础
    就是这个头文件以及下面using namespace std;这都是什么,还有这输出方式怎么看不懂


    我们先来看一个例子:

    #include
    int rand = 0;
    int main()
    {
        printf("hello world");
        printf("%d",rand);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个时候运行非常成功
    在这里插入图片描述

    我们将代码改一下
    你会发现只是添加了一个头文件

    #include
    #include
    int rand = 0;
    int main()
    {
        printf("hello world");
        printf("%d",rand);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    这个时候运行会出错
    看报错我们发现出现的是命名冲突
    rand重定义了
    命名冲突主要分为

    1. 我们写的跟库冲突
    2. 我们写的互相之间冲突

    这种命名冲突在C语言中的经典的问题,项目越大,我们会出现命名冲突就会越多
    c++中就出现了命名空间 —> namespace


    接下来我们来看namespace的用法:
    定义一个命名空间

    #include
    #include
    
    namespace  bay
    {
        int rand = 0;
    }
    
    int main()
    {
        printf("hello world");
        printf("%d",rand);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    我们会发现运行成功了
    命名空间就相当于一堵墙,将rand围起来了,我们就会访问不到,系统会去找那个全局rand,在这里全局的rand是一个函数名,系统就会出现提醒,提示不要这样使用

    那我们如何访问我们命名空间里面的rand呢?

    #include
    #include
    
    namespace  bay
    {
        int rand = 0;
    }
    
    int main()
    {
        printf("hello world");
        printf("%d",bay::rand);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    我们在rand前加入我们的名字bay::
    名称后面的冒号叫做(::)域作用限定符
    这样我们就可以随便进行重复命名变量,还可以访问我们需要的变量
    以后如果想避免冲突就可以采用这种方式了
    如果在自己定义的命名空间出现命名冲突怎么办?
    我们能想到的开发者也能想到,所以我们在命名空间里可以嵌套命名空间,可以无限套娃
    提示:我们在同一个文件定义命名空间以及多个文件中国定义命名空间,如果名称相同,编译器会认为是一个命名空间,不会发生冲突,反而会将他们合并哦

    那我们想使用自己定义的命名空间,再使用其中的内容是不想带那个前缀应该怎么办?

    我们在头文件下面加上 using namespace 【命名空间名称】;
    这样我们就可以随便使用,如果使用和里面的空间相同名称的变量,我们就会默认使用这个命名空间定义的变量,不需要加前缀。

    现在我们回到一开始,using namespace std;
    这句话的意思就是我们的代码就是在使用std命名空间里面的内容
    所以我们使用其中的东西就不用再带上std::这个前缀
    std是c++官方库定义的命名空间

    #include    --->>头文件  输入输出流
    
    int main()
    {
        std::cout<<"hello world";     -->>C语言的移位运算符,C++的流插入运算符                     --->>没有带命名空间使用  要加前缀
        int a=10;
        double b=11.11;
        std::cout<>C++能自动识别输出的变量类型
        std::cout<>C++可以连续输出,endl相当于C语言里面的\n,在这里等同于换行,endl是C++里面自定义的换行符
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们每次指定命名空间很不方便,但是将命名空间全部展开又有冲突的风险
    我们采用指定展开可以解决问题

    using std::cout;
    using std::endl;

    这两个变量就被展开了,在内容里就不用加前缀了
    我们就可以指定展开想要的变量或者函数都可以,这样我们的程序就可以变的非常的方便了

    我们C语言里面的scanf
    在C++里面就是std::cin,又叫做流提取

  • 相关阅读:
    中国高产水稻促粮食增产 国稻种芯:为碳减排做出重要贡献
    Openstack:创建实例
    【ESD专题】3.ESD防护器件(TVS管的原理和选型)
    使用过邮箱服务,你对`SMTP`、`POP3`、`IMAP`三大协议有过了解吗?
    GD32F103x 定时器
    windows7 下WOW6432Node和dump文件生成问题
    CMakelists.txt 编写语法说明
    论文一般的写作格式
    YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头
    2.6 Windows驱动开发:使用IO与DPC定时器
  • 原文地址:https://blog.csdn.net/weixin_60521256/article/details/134020253