IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2-C++相对C的扩展 -> 正文阅读

[C++知识库]2-C++相对C的扩展

击上方“南山府嵌入式”,选择“置顶/星标公众号

图片

干货福利,第一时间送达!

=====================

图片

  • 2.1?、作用域运算符

一般其情况下,如果两个变量名相同(全局和局部),优先执行局部变量。

图片

代码执行

图片

运算结果

和C语言类似,优先执行局部变量。

作用域的运算目的就是为了解决局部和全局变量重命名的问题。

图片

代码执行

图片

执行结果

这个例子可以看出,作用域运算符可以用来解决局部变量与全局变量的重名问题,即在局部变量的作用域内,可用::对被屏蔽的同名的全局变量进行访问。

2.2?名字控制

我们之前在学习c语言可以通过static关键字来使得名字只能在本编译单元内可见,在c++中我们将通过一种通过命名空间来控制对名字的访问。创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名字。c++允许我们对名字的产生和名字的可见性进行控制。

  • 2.2.1 C++命名空间(namespace)

在c++中,名称(name)可以是符**号常量、变量、函数、结构、枚举、类和对象等等。**工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。目的是为了最大可能解决命名冲突。(以后遇到命名空间最好加上作用域,加以区分)

我认为命名空间和结构体差不多,类似,

1-都不能在函数内部创建,

2-内部名称可以相同(指的是两个不同的结构体或者命名空间)

3-都可以进行嵌套

2.2.2命名空间使用语法

n 创建一个命名空间:

namespace A{
  int a = 10;
}
namespace B{
  int a = 20;
}
void test(){
  cout << "A::a : " << A::a << endl;
  cout << "B::a : " << B::a << endl;
}

n 命名空间的嵌套

namespace A{
  int a = 10;
  namespace B{
    int a = 20;
  }
}
void test(){
  cout << "A::a : " << A::a << endl;
  cout << "A::B::a : " << A::B::a << endl;
}

图片

图片

n 命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

namespace A{
  int a = 10;
}

namespace A{
  void func(){
    cout << "hello namespace!" << endl;
  }
}

void test(){
  cout << "A::a : " << A::a << endl;
  A::func();
}

n声明和实现可分离

namespace MySpace{
  void func1();
  void func2(int param);
}
void MySpace::func1(){
  cout << "MySpace::func1" << endl;
  }
void MySpace::func2(int param){
  cout << "MySpace::func2 : " << param << endl;
}

n无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接。

namespace{
  
  int a = 10;
  void func(){ cout << "hello namespace" << endl; }
}
void test(){
  cout << "a : " << a << endl;
  func();
}

n命名空间别名

namespace veryLongName{
  
  int a = 10;
  void func(){ cout << "hello namespace" << endl; }
}

void test(){
??namespace?shortName?=?veryLongName;//这两个等价,别名也可以使用
  cout << "veryLongName::a : " << shortName::a << endl;
  veryLongName::func();
  shortName::func();
}

图片

更多请关注**:**

https://blog.csdn.net/qq_38575895?spm=1000.2115.3001.5343

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:51:43  更:2022-09-04 00:53:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 4:58:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码