【C++】入门 --- 命名空间(一)

简介: 【C++】入门 --- 命名空间(一)

f557d03a3e464f37b08f08537d14af50.jpg


🍪一、前言

本篇文章是《C++ 初阶》 专栏的第一篇文章,从本专栏开始就进入了C++的学习了哦!本篇的内容是C++入门:命名空间的学习希望烙铁们可以理解消化哦🥰!!!

🍩1、C++简介

🚩C++是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。

🚩C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

🚩C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

🍩2、C++关键字

C++总计63个关键字,C语言32个关键字

🍪二、命名冲突

我们在C语言阶段了解过这样一个函数:rand函数,该函数用于生成伪随机整数

🥰我们来看下面这段代码👇

#include<stdio.h>
int rand = 5;
int main()
{
  printf("%d\n", rand);
  return 0;
}

运行成功,结果毋庸置疑,没有什么错误

🥰我们再来看一段代码👇

#include<stdio.h>
#include<stdlib.h>
int rand = 5;
int main()
{
  printf("%d\n", rand);
  return 0;
}

为什么包含了 头文件<stdlib.h> 就运行不通过了呢?

🚨原因是程序运行时,会遵循局部优先原则,也就是会先在局部作用域种寻找变量,如果在局部作用域中没有找,则会去全局作用域中寻找;
🚨此程序在全局作用域中找到了两个 rand(一个为 <stdlib.h>头文件内所包含的的rand函数,另一个则是自己创建的变量rand),也就是全局作用域中声明的标识符重复定义了,这时就发生了命名冲突,所以程序会报错

🍪三、命名空间

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

🍩1、命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{} 即可,{}中即为命名空间的成员,命名空间中可以定义变量/函数/类型。

🥰请看代码与注释👇

#include<iostream>
namespace Lvdr
{
  //命名空间中可以定义变量/函数/类型
  int rand = 10;
  int Add(int left, int right)
  {
    return left + right;
  }
  struct Node
  {
    struct Node* next;
    int val;
  };
}
//一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

🚨一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

🦄命名空间可以进行嵌套定义:

🥰请看代码与注释👇

namespace N1
{
  int a;
  int b;
  int Add(int left, int right)
  {
    return left + right;
  }
  namespace N2
  {
    int c;
    int d;
    int Sub(int left, int right)
    {
      return left - right;
    }
  }
}

🚩命名空间嵌套定义时,内层命名空间和外层命名空间即使存在相同的标识符,也不会发生命名冲突。

🚩同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

🚩一个工程中的test.h和上面test.cpp中两个N1会被合并成一个

目录
相关文章
|
6天前
|
安全 编译器 程序员
【C++初阶】C++简单入门
【C++初阶】C++简单入门
|
11天前
|
安全 编译器 C++
C++入门 | 函数重载、引用、内联函数
C++入门 | 函数重载、引用、内联函数
18 5
|
11天前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
32 4
|
11天前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
25 4
|
12天前
|
编译器 程序员 C语言
C++入门
C++入门
23 5
|
5天前
|
安全 编译器 C语言
|
5天前
|
存储 编译器 程序员
C++从遗忘到入门
本文主要面向的是曾经学过、了解过C++的同学,旨在帮助这些同学唤醒C++的记忆,提升下自身的技术储备。如果之前完全没接触过C++,也可以整体了解下这门语言。
|
29天前
|
安全 编译器 C++
C++一分钟之-C++中的属性命名空间
【7月更文挑战第22天】C++11引入属性作为元数据,虽无内置属性命名空间,但可通过自定义属性与命名空间组合实现类似效果。例如,创建`perf`命名空间存放`slow`和`fast`属性来标记函数性能。正确使用属性需注意位置、避免重复和确保与实现一致,以提升代码可读性和编译器理解。通过模拟属性命名空间,可以更有效地管理和使用属性。
35 1
|
30天前
|
存储 编译器 C++
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
C++从遗忘到入门问题之float、double 和 long double 之间的主要区别是什么
|
30天前
|
编译器 C++
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决
C++从遗忘到入门问题之C++中的浮点数类型问题如何解决