当前位置: 首页 > ds >正文

C++入门(namespace/输入输出)

C++入门

  • 一.C++起源
  • 二.C++的第一个程序
  • 三.命名空间(namespace)
    • 一、什么是namespace?
    • 二、namespace的价值
    • 三.namespace的定义
    • 四.命名空间的使用
  • 四.C++的输入与输出
  • 总结

在这里插入图片描述

一.C++起源

  1. 发展历程:
    C++ 由美国 AT&T 贝尔实验室的本贾尼・斯特劳斯特卢普博士在 20 世纪 80 年代初开发。它最初被称为 “C with Classes”,后来逐渐发展成为一种独立的编程语言,并在 1985 年正式定名为 C++。C++ 是在 C 语言的基础上进行了扩展和改进,保留了 C 语言的高效性和底层控制能力,同时增加了面向对象编程的特性。
  2. 语言特点:
  • 高效性
    C++的高效性是众所周知的。C++直接操作硬件资源,能够实现高效的内存管理和高性能计算。这使得它在需要高性能的应用场景中表现出色,例如游戏引擎和实时系统。
  • 面向对象
    C++ 支持面向对象编程,这意味着它将数据和操作数据的方法封装在类中,通过创建类的对象来实现对数据的操作和管理。这种编程方式使得代码更易于维护、扩展和复用。
  • 兼容性:
    C++ 与 C 语言有着良好的兼容性,许多 C 语言的代码可以在 C++ 环境中直接编译和运行。

废话不多说,直接开始技术介绍部分。

二.C++的第一个程序

第一个程序也是老朋友hello world.

#include<iostream>using namespace std;int main()
{cout << "hello world\n" << endl;return 0;
}

以上程序作为C++模板,基本上日后绝大部分C++程序都可以看得到。
以上内容依旧涉及太多知识盲区,下面将对其逐步解释。

三.命名空间(namespace)

一、什么是namespace?

namespace是一种逻辑上的分区,用于将标识符(如变量名、函数名、类名等)分组。通过命名空间,可以将不同的标识符放在不同的作用域中,从而避免命名冲突。简单来说,namespace就像一个容器,将相关的代码封装在一起。
例如:

namespace MyNamespace {int a = 1;int b = 2;
}

以上例子namespace就是一个命名空间,其中包含着a,b变量。
• C++标准库都放在⼀个叫std(standard)的命名空间中。

using namespace std;

上述代码所使用到的cout的函数,就是包括在std这个命名空间当中。

二、namespace的价值

  • 避免命名冲突
    在大型项目中,代码可能由多个开发者编写,或者使用了多个第三方库。这些代码中可能会出现相同的标识符名称,从而导致冲突。namespace通过为标识符提供一个唯一的上下文,有效避免了这种冲突。

三.namespace的定义

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

  2. namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量。

  3. C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的⽣命周期,命名空间域和类域不影响变量⽣命周期。

  4. namespace只能定义在全局,当然他还可以嵌套定义

  5. 项⽬⼯程中多⽂件中定义的同名namespace会认为是⼀个namespace,不会冲突。

  6. 命名空间的别名
    如果某个命名空间的名称较长,可以为其定义一个别名,以简化代码。
    namespace MY = mynamespace

四.命名空间的使用

编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间⾥⾯去查找。
所以我们要使⽤命名空间中定义的变量/函数,有三种⽅式:

  1. 指定命名空间访问,项⽬中推荐这种⽅式。
namespace N
{int a = 0;int b = 1;
}int main()
{printf("%d\n", N::a);return 0; 
}

在未展开命名空间的情况下,可以用 ::来对命名空间内的变量进行访问。
如上述代码,在:: 前加上命名空间,后面跟上命名空间的所属变量,就可以对其进行访问。

  1. using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。
// using将命名空间中某个成员展开 using N::b;int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0; 
}

在全局中,可以只展开命名空间中的其中一个变量。如上述,将命名空间中的b展开后,下面可以直接对b进行输出。

  1. 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。
// 展开命名空间中全部成员 using namespce N;int main()
{printf("%d\n", a);printf("%d\n", b);return 0; 
}

通过using 可以将整个命名空间展开,展开后可以直接对命名空间中的变量进行使用。using namespace std;也同理是将C++本身所含的标准库当中的函数展开了。

四.C++的输入与输出

在C++的第一个代码中,我们可以看到cout 这个符号,这是C++中的输出函数。
下面将进行详细说明。

  1. 是Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输出对象。
    • std::cin是 istream类的对象,它主要⾯向窄字符
    (narrow characters(of type char))的标准输⼊流。
    • std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
    • std::endl 是⼀个函数,流插⼊输出时,相当于插⼊⼀个换⾏字符加刷新缓冲区。
    • <<是流插⼊运算符,>>是流提取运算符。(C语⾔还⽤这两个运算符做位运算左移/右移)
  2. 自动识别变量类型
    使⽤C++输⼊输出更⽅便,不需要像printf/scanf输⼊输出时那样,需要⼿动指定格式,C++的输⼊输出可以⾃动识别变量类型,其实最重要的是C++的流能更好的⽀持⾃定义类型对象的输⼊输出。
  3. std库
    • cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要通过命名空间的使⽤⽅式去⽤他们。
    • 这⾥我们没有包含<stdio.h>,也可以使⽤printf和scanf,在包含间接包含了。(此条取决于编译器类型)

总结

此章作为C++的入门博客,主要在介绍C++的第一个程序中所涉及到的知识。
主要有命名空间和输入输出两个方面,当然这里介绍的还是太片面了些,在日后学习中还会完善。

http://www.xdnf.cn/news/2767.html

相关文章:

  • 2025A卷-正整数到Excel编号之间的转换
  • 对Electron打包的exe文件进行反解析
  • 在idea开发中遇到的20个bug
  • 晶振PCB设计核心要点与规范
  • 设备指纹护航电商和金融反欺诈体系建设
  • 飞凌嵌入式T527核心板获得【OpenHarmony生态产品兼容性证书】
  • STL标准模板库
  • 杰理-ios获取不了时间问题
  • 爬虫过程中如何确保数据准确性
  • Qt/C++面试【速通笔记四】—Qt中的MVC模式
  • VLM-E2E:通过多模态驾驶员注意融合增强端到端自动驾驶——论文阅读
  • RecoNIC 入门:SmartNIC 上支持 RDMA 的计算卸载-FPGA-智能网卡-AMD-Xilinx
  • 【Vue.js】组件数据通信——基于Props 实现父组件--> 子组件传递数据(最基础案例)
  • uniapp自定义头部(兼容微信小程序(胶囊和状态栏),兼容h5)
  • 数据展示功能界面设计与实现及终端控制界面思路(17)
  • 使用OpenCV和dlib库进行人脸关键点定位
  • 2025系统架构师---管道/过滤器架构风格
  • 待验证---Oracle 19c 在 CentOS 7 上的快速安装部署指南
  • Java生成微信小程序码及小程序短链接
  • TensorFlow深度学习框架:从入门到精通的完整指南
  • 基于Java,SSH,Vue电子商品交易二手平台仿闲鱼转转验机系统设计
  • Eureka 深度解析:从原理到部署的全场景实践
  • 喷泉码技术在现代物联网中的应用 设计
  • 组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)
  • 前端基础面试题(4-8)
  • 推荐 1 款 9.3k stars 的全景式开源数据分析与可视化工具
  • Python爬虫(9)Python数据存储实战:基于pymysql的MySQL数据库操作详解
  • 疫苗接种体系进入“全生命周期”时代:公共卫生治理再提速
  • 学习记录:DAY19
  • AI在Java中的场景面试题深度解析