C++初识—— 命名空间和基本输入输出
一.C和C第一个程序对比在C语言中第一个程序为#includestdio.h int main() { printf(hello wrold\n); return 0; }引用头文件stdio.h并利用printf函数输出。而在C中则需要#includeiostream using namespace std; int main() { cout hello world endl; return 0; }引用头文件展开命名空间std并利用cout函数来输出。接下来将对C的基础语法进行一定的讲解。二.命名空间namespace在C/C中变量、函数和类都是大量存在的。而针对这些大量存在的变量、函数和类重名的情况就会产生歧义甚至是错误。而为了解决不同函数、不同类中所存在的同名变量、函数的情况在C中定义了namespace命名空间来解决这一问题。在C语言中在一个函数中是不允许出现重名变量的。如果将重名变量分别定义在全局域和局部域程序在调用的过程中会优先调用局部域然后再去调用全局域。#includestdio.h int rand 1; int main() { int rand 0; printf(%d\n,rand); printf(%d\n,::rand);//用冒号表示输出某个特定命名空间的变量 return 0; }例如在上述代码中同时在全局域和局部域定义了rand变量。如果只利用printf输出rand变量则会输出局部变量中所定义的rand输出结果为0.如果只想输出全局域的rand变量则需要利用 :: 操作符如果是全局域:: 前不需要加任何东西。namespace本质是定义了一个独立于全局域和局部域之外的域不同的命名空间可以定义相同的变量其使用语法如下#includestdio.h #includestdlib.h namespace example { int rand 0; } //int rand 1; int main() { int rand 2; printf(%d\n,rand);//默认局部变量 2 //printf(%d\n,::rand);//全局域中的rand这里会重载 printf(%p\n,::rand);//rand函数的函数指针 printf(%d\n,example::rand);//example的命名空间中 return 0; }命名空间的定义类似于结构体的定义法不同点是最后没有分号; 在主函数中如果特定输出example域中的rand变量的值则需要利用双冒号example::rand表示定向输出example域中的rand变量的值。同样如上例所示引入了头文件stdlib.h其内部有rand函数所以在全局域中定义的rand函数会形成重载程序编译报错。C中存在有局部域、全局域、命名空间域和类域。而有了不同域的隔离变量名字相同的情况就得到解决只需要根据实际需求去相应的域中找相应的变量即可。同时命名空间域中变量的生命周期和全局变量相同持续到整个程序运行结束。命名空间可以进行嵌套其嵌套和调用的示例如下#includeiostream namespace example { namespace example1 { int a 1; struct Node { int a 1; char ch c; }; int Add(int x, int y) { return x y; } } namespace example2 { int a 2; struct Node { int a 1; char ch c; }; int Add(int x, int y) { return x y; } } } int main() { std::cout example::example1::a std:: endl; return 0; }如这段代码实例在example的命名空间中定义了example1和example2的两个命名空间如果想要输出example1中a的值则需要example::example1::a。通过上例也可以看出命名空间可以定义变量、函数、结构体类。C的标准库函数定义在std中所以在用一些标准输入输出函数之前要了解其具体在什么命名空间中。例如cout和cin等函数都在std的命名空间中所以使用时需要std::cout std::endl; std::cin a ;如果在一整个程序中确认不会出现相同名称的情况下可以利用如下代码进行命名空间的展开来方便输入输出。using namespace std;这里的展开和头文件在编译过程中的展开完全不相同头文件在编译过程中的展开是将头文件中的内容拷贝到此位置而命名空间的展开则是指将变量\函数可查找的范围在局部域全局域之外新增加了一个std域并没有将其内容拷贝。但这种方法虽然在学习C基础输入输出时一般不会出现问题但如果在之后一个大的项目中这样全部展开容易出现不少错误所以针对此情况可以针对常用的函数进行展开如下面代码所示using std::cout; using std::cin; using std::endl;这样就可以在程序中直接调用cout、cin和endl。如果出现了多个相同名称的namespace程序会认为其是同一个命名空间而将其合并到一起。二.C的输入和输出在C中输入和输出定义到 iostream 的头文件中其是Input Out Stream的缩写是标准的输入输出流库输入输出对象。std :: cin是 istream 类的对象主要面向窄字符的标准输入流。std::cout是ostream类的对象主要面向找字符的标准输出流。std::endl是一个函数实现了换行以及刷新缓冲区的功能。 是流插入运算符 是流提取运算符。值得一提的是C中的cout和cin可以自动识别类型方便用户进行输入和输出操作。

相关新闻

C++初始02——函数参数缺省、函数重载和引用

C++初始02——函数参数缺省、函数重载和引用

一.参数缺省参数缺省指的是,在函数的参数列表中,针对某些或全部参数,给其定义一个初始值,当调用函数传参时,如果不指定参数数值,则会利用默认值进行函数参数的运算。函数参数缺省,也可以成为参数…

2026/5/17 5:19:54 阅读更多 →
DBO-RBF多输出【23年新算法】基于蜣螂算法(DBO)优化径向基记忆神经网络(RBF)的多...

DBO-RBF多输出【23年新算法】基于蜣螂算法(DBO)优化径向基记忆神经网络(RBF)的多...

DBO-RBF多输出【23年新算法】基于蜣螂算法(DBO)优化径向基记忆神经网络(RBF)的多输出回归预测(多输入多输出)程序已经调试好,无需更改代码替换数据集即可运行数据格式为excel 1、运行环境要求MATLAB版本为2018b及其以上 2、评价指标包括:R2、MAE、MBE、RMSE等&#…

2026/7/4 3:40:20 阅读更多 →
基于Java的户外用品销售智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

基于Java的户外用品销售智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 户外用品销售智慧管理系统摆脱了传统选题的枯燥乏味,它不仅具有创新性与实用性,还能帮助零基础开发者轻松上手。该系统涵盖职务管理、计量单位管理、员工管理等16个功能模块,满足普通员工和部门领导的不…

2026/5/17 5:19:53 阅读更多 →

最新新闻

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher Ketcher作为一款现代化的Web化学结构编辑器,其技术架构体现了对复…

2026/7/5 4:33:16 阅读更多 →
抖店AI标题优化怎么用标题违规和低质标题怎么改

抖店AI标题优化怎么用标题违规和低质标题怎么改

抖店AI标题优化怎么用?标题违规和低质标题怎么改 抖店商品标题写不好,会影响审核、搜索理解和买家点击。很多商家从 1688 搬标题时,原标题里带批发词、品牌词、极限词、无关热词,直接上架容易违规,也不一定适合抖店买家…

2026/7/5 4:29:15 阅读更多 →
如何3分钟完成通达信缠论插件部署:终极自动化分析指南

如何3分钟完成通达信缠论插件部署:终极自动化分析指南

如何3分钟完成通达信缠论插件部署:终极自动化分析指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为复杂的缠论分析而烦恼吗?面对繁琐的笔段划分和中枢识别,传…

2026/7/5 4:27:15 阅读更多 →
接口自动化测试项目框架详解

接口自动化测试项目框架详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选…

2026/7/5 4:25:15 阅读更多 →
单片机IWIP 原子云实验

单片机IWIP 原子云实验

单片机 :STM32F407 开发板:DMF407电机开发板 平台:keil V5.31HSE 为8MHZ HSI为16MHZ主函数int main(void) {HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */delay_init…

2026/7/5 4:25:15 阅读更多 →
Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

1. 项目概述:这不是一个“升级包”,而是一套可落地的嵌入式AI推理工作流 你手头有一块 Nano Banana 开发板——它不是树莓派,也不是 Jetson Nano,而是基于全志 H616 芯片、带双千兆网口、4GB LPDDR4、支持 PCIe 2.0 x1 的国产小钢…

2026/7/5 4:23:15 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻