【落羽的落羽 C++】C++入门基础·其之一

文章目录
- 一、C++简介
- 1. C++的发展历史
- 2. C++参考文档
- 二、namespace命名空间
- 1. C语言的一个缺陷
- 2. namespace
- 3. 命名空间的使用
- 3.1 命名空间成员访问
- 3.2 using展开
一、C++简介
1. C++的发展历史
C++起源于1979年的贝尔实验室,Bjarne Stroustrup(本贾尼博士)在那里从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,他感受到了现有编程语言(如C语言)在表达能力、可维护性、可扩展性方面的不足。他在1983年在C语言的基础上添加了面对对象编程的特性。设计出了C++的雏形,此时的C++已经有了类、封装、继承等核心概念。
随后的几年中,C++在学术界和工业界的应用逐渐增多,一些大学和研究所开始将C++作为教学和科研的首选语言,一些公司开始在产品开发中尝试使用C++。这一时期C++的标准库和模板等特性也得到了进一步的完善和发展。
C++的标准化于1989年开始,当时成立了一个ANSI和ISO国际标准化组织的联合标准化委员会。1994年标准化委员会提出了C++标准化的第一个草案。不久,惠普实验室开发了一系列软件,统称为STL(Standard Template Library),联合标准化委员会投票通过了将STL包含在C++标准的提议。但STL对C++的扩展超出了C++最初定义标准范围,虽然在标准中加入STL是个重要的决定,但也因此延缓了C++的标准化进程。
直到1997年11月14日,联合标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/ISO标准被投入使用。
而每隔几年,C++都会迎来一次版本更新,如1998年的C++98、2003年的C++03、2011年的C++11、2014年的C++14……目前2026年的C++26正在制定中。
一句话总结:C++是一门扩展了C语言的语言,它兼容C语言的大部分语法
2. C++参考文档
https://legacy.cplusplus.com/reference
https://en.cppreference.com/w/
https://zh.cppreference.com/w/cpp
这三个网站是C++程序设计者最常用的C++参考文档。
第一个我们已经不陌生了,在C语言学习阶段经常去查询库函数:

然而它并不是C++的官方文档,是“民间大神”建设的科普性网站。在UI和用户访问方面相比官方文档改进了不少。缺点是它太久没有更新,内容很老甚至可能不是正确的了。
第二个网站就是C++的官方文档,是全英文的,也是最推荐大家学习的。第三个网站是官方文档的翻译版。我们鼓励大家还是阅读官方文档,因为作为程序员培养英文文档阅读能力还是很重要的,有一些知识与技术可能并没有汉化,要依靠自己去查询学习。



二、namespace命名空间
1. C语言的一个缺陷
还记得我们讲过:作用域是一个程序设计概念。通常来说,针对每一个变量,都有它的可用的范围,这就是作用域。C语言中我们只接触到了全局域、局部域,而在同一个域中不能出现相同名字的变量或函数或类型,否则会编译报错。在大型的项目中,可能要用到成千上万个函数,团队多人协作时经常会有起名冲突的问题,这是C语言无法解决的问题。
2. namespace
所以,C++克服了这一问题,提出了命名空间这一概念。定义命名空间,需要用关键字namespace,后面加自定义空间名字,接上一对{ },{ }中即为命名空间的成员,可以定义变量、函数、类型。
tip:进入C++的学习,记得创建源文件后缀是 .cpp 哦
namespace test //test是自定义名字
{int a = 1;void Swap(int* x, int* y){*x = *x ^ *y;*y = *x ^ *y;*x = *x ^ *y;}struct st{int n;char m;};
}
namespace的本质是定义了一个域,和其他局部域、全局域相互独立。既然它们是不同的域,完全可以在各自其中定义相同名字的变量或函数或结构了。举个例子:
#include"test.h"
int a = 2;
int main()
{return 0;
}
//如果test.h中有:int a;则程序会报错
//如果test.h中有:namespace test{ int a; }不会报错
//前者程序中的全局域中出现了两次定义a(头文件中一次主函数上面一次),
//后者的全局域和命名空间域各只出现了一次定义a


C++中域有全局域、函数局部域、命名空间域、类域。域影响的是编译时语法查找一个变量或函数或类型出处的逻辑,所以在一个域内出现的相同名字会使语法无法判断。有了域隔离,名字冲突就解决了。除此之外,局部域和全局域还会影响变量的生命周期,而命名空间域和类域的变量生命周期默认是整个程序的生命周期。
我们还要知道的是:
- namespace只能定义在全局,不能定义在函数里。
- namespace可以嵌套定义。
- 项目工程中多文件中定义的同名namespace会被认为是一个namespace,会被程序自动合并,不会冲突。
- C++标准库都放在一个叫std(standard)的命名空间中。
//namespace的嵌套定义
namespace MiHoYo
{int a = 10;char c = 'Q';namespace Honkai_3{int a = 1;char c = 'X';}namespace Genshen_Impact{int a = 4;char c = 'J';}namespace Honkai_Star_Rail{int a = 9;char c = 'O';}
}
3. 命名空间的使用
3.1 命名空间成员访问
访问命名空间的操作符是::,使用方式和结构体的. ->很像。
比如,语句test::a,是从命名空间test中找变量a;::a默认是从全局域中找变量a;而a就是先从局部域找a,找不到再从全局域找a。函数或类型也同理
代码示例:
#include<stdio.h>namespace test1
{int a = 1;namespace test2{int a = 2;}
}int a = 3;int main()
{int a = 4;printf("%d\n", test1::a); //访问test1的aprintf("%d\n", test1::test2::a); //访问test1中的test2中的aprintf("%d\n", ::a); //默认访问全局域的aprintf("%d\n", a); //访问局部域的a,局部域没有a则访问全局域的areturn 0;
}

函数也是一样的:
#include<stdio.h>namespace test
{int a = 2;int b = 8;int Add(int x, int y){return x + y;}
}int main()
{printf("%d", test::Add(test::a, test::b));return 0;
}

3.2 using展开
C++中还有一个关键字using,能将命名空间成员展开,即让这个成员从命名空间中“出来”到全局域中,相当于全局域中再定义了一次,原命名空间仍保留成员。使用方法是using 命名空间名::成员名;,如:
namespace test
{int a = 1;char c = 'P';
}
using test::a; //这一句可以看做int a = 1;
void main()
{printf("%d ", a);printf("%d ", test::a);//两者结果相同
}

但是,展开了a相当于还是在全局域中定义了a,又带来了命名冲突的风险。所以只有项目中经常访问不存在冲突的成员推荐这种方式。
特别地,using namespace test;可以将命名空间test的全部成员都展开:

然而,展开命名空间中的全部成员,命名冲突风险很大,项目中不推荐。只有我们的日常小练习中方便推荐使用。

本篇完,感谢阅读~
相关文章:
【落羽的落羽 C++】C++入门基础·其之一
文章目录 一、C简介1. C的发展历史2. C参考文档 二、namespace命名空间1. C语言的一个缺陷2. namespace3. 命名空间的使用3.1 命名空间成员访问3.2 using展开 一、C简介 1. C的发展历史 C起源于1979年的贝尔实验室,Bjarne Stroustrup(本贾尼博士&#…...
docker使用代理的简单配置
1准备代理服务器 准备代理服务器,例如192.168.120.168:52209 配置docker.service文件 查看service文件的位置 systemctl status docker 编辑service文件 vim /usr/lib/systemd/system/docker.service 添加代理配置 ... [Service] Environment"HTTP_PROXY…...
每日一题-设计食物评分系统,哈希表的有效使用
本题出自LeetCode2353.设计食物评分系统,连着一星期都是设计类的题目哈 题目 设计一个支持下述操作的食物评分系统: 修改 系统中列出的某种食物的评分。返回系统中某一类烹饪方式下评分最高的食物。 实现 FoodRatings 类: FoodRatings(Strin…...
大模型应用:多轮对话(prompt工程)
概述 在与大型语言模型(如ChatGPT)交互的过程中,我们常常体验到与智能助手进行连贯多轮对话的便利性。那么,当我们开启一个新的聊天时,系统是如何管理聊天上下文的呢? 一、初始上下文的建立 1. 创建新会…...
WSDM24-因果推荐|因果去偏的可解释推荐系统
1 动机 可解释推荐系统(ERS)通过提供透明的推荐解释,提高用户信任度和系统的说服力,如下图所示,然而: 1:现有工作主要关注推荐算法的去偏(流行度偏差),但未显…...
VScode在Windows11中配置MSVC
因为MSVC编译器在vs当中,所以我们首先要安装vs的一部分组件。如果只是需要MSVC的话,工作负荷一个都不需要勾选,在单个组件里面搜索MSVC和windows11 SDK,其中一个是编译器,一个是头文件然后右下角安装即可。搜索Develop…...
数据库基础二(数据库安装配置)
打开MySQL官网进行安装包的下载 https://www.mysql.com/ 接着找到适用于windows的版本 下载版本 直接点击下载即可 接下来对应的内容分别是: 1:安装所有 MySQL 数据库需要的产品; 2:仅使用 MySQL 数据库的服务器; 3&a…...
cuda-12.4.0 devel docker 中源码安装 OpenAI triton
1,准备 docker 容器 下载docker image: $ sudo docker pull nvidia/cuda:12.6.2-devel-ubuntu20.04 创建容器: sudo docker run --gpus all -it --name cuda_LHL_01 -v /home/hongleili/ex_triton/tmp1:/root/ex_triton/tmp1 nvidia/cuda:12.6…...
doris: Hive Catalog
通过连接 Hive Metastore,或者兼容 Hive Metatore 的元数据服务,Doris 可以自动获取 Hive 的库表信息,并进行数据查询。 除了 Hive 外,很多其他系统也会使用 Hive Metastore 存储元数据。所以通过 Hive Catalog,我们不…...
【LeetCode】131.分割回文串
目录 题目描述输入输出示例及数据范围思路C 实现 题目描述 这道题目来自 LeetCode 131. 分割回文串。 题目描述如下: 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 输入输出示例及数据…...
JeeWMS graphReportController.do SQL注入漏洞复现(CVE-2025-0392)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统
2024旅游推荐系统爬虫可视化(协同过滤算法) 基于Pythondjangomysql旅游数据爬虫采集可视化分析推荐系统 有文档说明 部署文档 视频讲解 ✅️基于用户的协同过滤推荐算法 卖价就是标价~ 项目技术栈 Python语言、Django框架、MySQL数据库、requests网络爬虫…...
我的工作经历
主要说一下毕业工作大半年了一些心得与想法。 首先是因为本科不好的原因,单2硕士找了一个国企(其实应该说是央企)。也幸好找的是央企,后续工作基本上没有强度,不然后期神经衰弱抑郁症家里乱七八糟催婚的事情能把人逼疯…...
筑牢安全防线:工商业场所燃气泄漏防护新方案
燃气安全是企业经营不可逾越的生命线。在餐饮后厨、化工车间、酒店锅炉房等场所,可燃气体一旦泄漏,极易引发严重事故。如何实现精准监测、快速响应,成为工业及商业领域安全管理的核心诉求。旭华智能深耕安全监测领域,推出的工业及…...
基于STM32的智能停车场管理系统
1. 引言 传统停车场管理存在车位利用率低、停车体验差等问题,难以满足现代城市停车需求。本文设计了一款基于STM32的智能停车场管理系统,通过车位状态实时监测、智能导航与无感支付技术,实现停车资源的高效利用与用户服务的全面升级。 2. 系…...
MacBook 终端中使用 vim命令
在 MacBook 终端中使用 vim 编辑器时,以下是一些常用命令和操作指南: 1. 基本操作 启动 vim vim 文件名 # 打开或创建文件退出 vim 保存并退出: 按 Esc,然后输入 :wq,按 Enter。 不保存退出: 按 Esc&am…...
VoIP之SBC(会话边界控制器)
SBC(Session Border Controller,会话边界控制器)是一种在VoIP通信网络中的重要设备,用于连接处理会话边界,核心功能包含信令代理/媒体代理、网络NAT穿越、防火墙、QoS等。 经典案例 关键说明 用于客户端和核心业务服务器的互联互通支持IP接入控…...
threejs:document.createElement创建标签后css设置失效
vue3threejs,做一个给模型批量CSS2D标签的案例,在导入模型的js文件里,跟着课程写的代码如下: import * as THREE from three; // 引入gltf模型加载库GLTFLoader.js import { GLTFLoader } from three/addons/loaders/GLTFLoader.…...
安装2018版本的petalinux曲折经历
具体操作步骤 1.安装VMware Workstation15.5的虚拟机2.安装Ubuntu16.04.43.配置Ubuntu的环境1.可以复制粘贴的指令2.安装vim 4.准备安装petalinux1.先配置petalinux的安装环境2.替换镜像源1.备份原始的软件源2.从以下镜像点找到合适自己系统版本的源3.执行替换镜像源1.打开源文…...
return和print
目录 1.print的用法 2.return的用法 3. print 和 return 的区别 4.总结 1.print的用法 print 是一个函数,用于将信息输出到控制台(终端)。它主要用于显示程序运行的结果,方便用户查看。print 的作用是输出内容,而不…...
Ego-Planner仿真不迷路:手把手教你配置PX4位姿真值话题与launch文件(附常见报错解决)
Ego-Planner仿真实战:PX4位姿真值配置与launch文件深度解析 在无人机自主导航领域,仿真环境搭建是算法验证的关键第一步。当你在Ego-Planner仿真中看到"找不到里程计"的红色报错时,那种挫败感我深有体会——明明Gazebo中的无人机模…...
2026互联网大厂AI招聘趋势:高薪岗位解析,普通人如何抓住AI时代红利?
2026年互联网大厂招聘,AI岗已成绝对主角,百度AI岗占比超90%,阿里超6成,腾讯、字节等AI相关岗位占比也达6-7成,AI不再是“可选项”,而是“必答题”。以下是核心岗位、薪资与优势的精炼解读,帮你快…...
华为OD技术面真题 - JAVA开发- spring框架 - 7
文章目录Spring中单例Bean会存在线程安全吗?如何保证单例Bean线程安全什么是循环依赖?Spring可以解决哪些类型的循环依赖Spring是如何解决循环依赖的Spring中单例Bean会存在线程安全吗? 分情况分状态讨论: 创建:spri…...
2024版IntelliJ IDEA中文设置保姆级教程(附社区版/专业版差异)
2024版IntelliJ IDEA中文设置全攻略:从安装到疑难排错 刚接触IntelliJ IDEA的开发者常被其强大的功能所震撼,但英文界面却成了第一道门槛。作为JetBrains家族的旗舰IDE,2024版本在本地化支持上有了显著改进,但专业版与社区版的汉化…...
从《节奏医生》到你的游戏:拆解Koreographer Pro版如何实现高级音频集成(Wwise/FMOD)
从《节奏医生》到你的游戏:Koreographer Pro版如何实现高级音频集成(Wwise/FMOD) 在《节奏医生》这类音游中,玩家按键与音乐节拍的完美同步是游戏体验的核心。这种精准的音频同步背后,往往需要复杂的音频中间件集成。对…...
龙芯k - 走马观碑组MPU驱动移植儇
先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)…...
SEO 中的移动端优化是什么_SEO 中的长尾关键词是什么
SEO 中的移动端优化是什么 在当今互联网时代,移动设备的使用频率已经远超过了桌面电脑。无论是在日常生活中,还是在商业领域,移动端优化在SEO中的重要性愈发凸显。SEO 中的移动端优化究竟是什么呢?本文将详细解析这一问题&#x…...
从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南)
从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南) 第一次接触泛微Ecology9时,面对庞大的系统架构和复杂的二次开发文档,我像大多数新手一样感到无从下手。经过半年多的实战摸索,从环境搭建到…...
Symfony 安全日志集成:TokenProcessor与SwitchUserTokenProcessor完全指南
Symfony 安全日志集成:TokenProcessor与SwitchUserTokenProcessor完全指南 【免费下载链接】monolog-bridge Provides integration for Monolog with various Symfony components 项目地址: https://gitcode.com/gh_mirrors/mo/monolog-bridge 在Symfony应用…...
紧急预警:Mojo v1.1.3+ 版本Python插件存在ABI不兼容漏洞!立即执行这3条命令规避崩溃风险
第一章:紧急预警:Mojo v1.1.3 版本Python插件存在ABI不兼容漏洞!立即执行这3条命令规避崩溃风险近期安全审计发现,Mojo 编译器 v1.1.3 及后续版本(含 v1.1.4、v1.1.5)中内置的 Python 插件(mojo…...
