文章目录

  • 1.C++的第⼀个程序
  • 2.命名空间
    • 2.1 namespace的价值
    • 2.2 namespace的定义
    • 2.3 命名空间使⽤

最新的c++标准(建议收藏)

1.C++的第⼀个程序

C++兼容C语⾔绝⼤多数的语法,所以C语⾔实现的helloworld依旧可以运⾏,C++中需要把定义⽂件代码后缀改为.cpp,vs编译器看到是.cpp就会调⽤C++编译器编译

#include<stdio.h> 
int main() 
{ printf("hello world\n");  return 0; 
}

当然C++有⼀套⾃⼰的输⼊输出,严格说C++版本的helloworld应该是这样写的:

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

2.命名空间

2.1 namespace的价值

在C/C++中,变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。

同一作用域不可重复定义同个变量

使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现可以解决这个问题

//rand在全局作用域出现两次
#include<stdio.h>     
#include<stdlib.h>//包含rand函数  
int rand = 10;//新的全局变量 
int main() 
{ // 编译报错:error C2365: “rand”: 重定义;以前的定义是“函数”  printf("%d\n", rand);//不知打印哪个 return 0; 
}

2.2 namespace的定义

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

• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了

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

namespace只能定义在全局而且还可以嵌套定义

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

C++标准库都放在⼀个叫std(standard)的命名空间中

#include<stdio.h>     
#include<stdlib.h>  
// 1. 正常的命名空间定义  
namespace name 
{ // 命名空间中可以定义变量/函数/类型  int rand = 10; int Add(int left, int right) { return left + right; } struct Node { struct Node* next; int val; }; 
} 
int main() 
{ // 这⾥默认是访问的是全局的rand函数指针//编译器语法查找确认,默认先局部查找->全局查找//::域作用限定符printf("%p\n", rand); // 这⾥指定name命名空间中的rand//编译器语法查找确认,指定作用域,就直接去这个域查找->没有找到就报错未声明的标识符printf("%d\n", bit::name); return 0; 
}
//2. 命名空间可以嵌套  
namespace name 
{  namespace wl{ int rand = 1; int Add(int left, int right) { return left + right; } }  namespace wll{ int rand = 2; int Add(int left, int right) { return (left + right)*10; } } 
} 
int main() 
{ printf("%d\n", name::wl::rand); printf("%d\n", name::wll::rand); printf("%d\n", name::wl::Add(1, 2)); printf("%d\n", name::wll::Add(1, 2)); return 0; 
} 

在这里插入图片描述

2.3 命名空间使⽤

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

• 指定命名空间访问,项⽬中推荐这种⽅式。

• using将命名空间中某个成员展开,项⽬中经常访问的不存在冲突的成员推荐这种⽅式。

• 展开命名空间中全部成员,项⽬不推荐,冲突⻛险很⼤,⽇常⼩练习程序为了⽅便推荐使⽤。

#include<stdio.h>     
namespace bit 
{ int a = 0; int b = 1; 
} 
int main() 
{ // 编译报错:error C2065: “a”: 未声明的标识符  printf("%d\n", a); return 0; 
}
// 指定命名空间访问  
int main() 
{ printf("%d\n", N::a); return 0;  
} 
// using将命名空间中某个成员展开  
using N::b; 
int main() 
{ printf("%d\n", N::a); printf("%d\n", b); return 0;  
} 
// 展开命名空间中全部成员  
using namespace N; 
int main() 
{ printf("%d\n", a); printf("%d\n", b); return 0;  
} 

注意:允许存在未命名的空间

#include<stdio.h>
namespace
{int a = 0; int b = 1; 
}
int main()
{printf("%d",a);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921595.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921595.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921595.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

版本发布流程手册:Release分支规范与Bug分级标准全解析

在软件交付日益高频、用户需求快速迭代的今天&#xff0c;版本发布流程的规范性直接决定了团队的交付效率、产品质量和用户满意度。然而&#xff0c;许多团队仍面临以下痛点&#xff1a; 发布混乱&#xff1a;分支管理随意&#xff0c;代码冲突频发&#xff1b;质量失控&#…

什么是CA根证书

CA 根证书&#xff08;Certificate Authority Root Certificate&#xff09;是 数字证书体系&#xff08;PKI&#xff0c;Public Key Infrastructure&#xff09; 中的核心证书。它有几个关键点&#xff1a;1. 定义 CA&#xff08;Certificate Authority&#xff09;&#xff1…

git push -u origin main 这个-u起什么作用

git push -u origin main 里的 -u 等价于 --set-upstream&#xff0c;它的作用是&#xff1a;&#x1f449; 把本地分支 main 和远程分支 origin/main 绑定&#xff08;建立追踪关系&#xff09;。&#x1f539; 具体效果第一次推送分支时&#xff0c;如果加了 -u&#xff1a;本…

【Unity基础】两个关于UGUI中Text对非英文字体支持的问题

问题1&#xff1a;Unity中为什么UGUI中的Text(Textmeshpro&#xff09;默认不支持非英文字体&#xff0c;而legacy中的text却可以呢&#xff1f; 在Unity中&#xff0c;TextMeshPro&#xff08;TMP&#xff09;默认不支持非英文字体&#xff0c;而Legacy Text支持&#xff0c;主…

碎片时间干活的好手(requestIdleCallback)

&#x1f7e2; What —— 它是什么&#xff1f; requestIdleCallback(callback[, options]) 是浏览器提供的一个 API&#xff0c;用来在主线程空闲时执行一些优先级不高的任务。 它的特点&#xff1a; 异步执行&#xff1a;不会打断关键的渲染、交互、动画。节省性能&#xff1…

第三方网站测评:【WEB应用文件包含漏洞(LFI/RFI)的测试步骤】

文件包含漏洞分为本地文件包含(LFI)和远程文件包含(RFI)两类。LFI允许读取服务器本地文件,RFI可执行远程服务器上的恶意代码。PHP应用中include()、require()等函数未正确过滤用户输入时易产生此类漏洞。 检测URL中可能包含文件的参数,常见特征如下: 参数名包含file、pa…

网络爬虫(web crawler)

文章目录一、什么是网络爬虫二、爬虫工作流程详解第1步&#xff1a;起始点 - URL种子库&#xff08;Seed URLs&#xff09;第2步&#xff1a;大脑 - 调度器&#xff08;Scheduler&#xff09;第3步&#xff1a;双手 - 网页下载器&#xff08;Downloader&#xff09;第4步&#…

redis的高可用(哨兵)

Redis 的主从复制模式下&#xff0c;一旦主节点由于故障不能提供服务&#xff0c;需要人工进行主从切换&#xff0c;同时大量的客户端需要被通知切换到新的主节点上&#xff0c;对于上了一定规模的应用来说&#xff0c;这种方案是无法接受的&#xff0c;于是Redis从2.8开始提供…

安徽某能源企业积极推进运维智能化转型,引入高压配电房机器人巡检系统

在工业自动化与智能化深度融合的当下&#xff0c;机器人技术已成为能源行业提质增效的关键支撑。特别是在配电房这类高压电力核心区域的运维工作中&#xff0c;传统人工巡检不仅面临效率低下、巡检周期长的困境&#xff0c;更因人员直接接触高压设备而存在极高的安全风险。此&a…

数据结构_二叉平衡树

#include <stdio.h> #include <stdlib.h> #define max(a,b) ((a > b)? (a):(b))//平衡二叉树的节点结构 typedef struct AVL_TreeNode{int data; //数据域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//记录树的高度&#xff0c;用于计算平衡因子 }…

扫描件、PDF、图片都能比对!让文档差异无所遁形

智能文档比对系统可精准识别文档差异&#xff0c;解决金融、法律等多方协作场景下的版本混乱、审核低效和合规风险问题&#xff0c;将一份百页文档的人工核对从数小时缩短至3分钟以内。 文档差异比对常见场景有哪些&#xff1f; 每一次文档的修改都可能带来潜在风险&#xff0c…

excel里面店铺这一列的数据结构是2C【uniteasone17】这种,我想只保留前面的2C部分,后面的【uniteasone17】不要

这个结构是&#xff1a; 2C【uniteasone17】只要取前面的 2C 部分&#xff0c;可以用 Excel 的 公式 或者 文本函数 来实现。 方法 1&#xff1a;使用公式提取 假设店铺数据在 A2 单元格&#xff1a; LEFT(A2,FIND("【",A2)-1)&#x1f449; 解释&#xff1a; FIND(“…

四、神经网络的学习(中)

4.3 数值微分梯度法使用梯度的信息决定前进的方向。本节将介绍梯度是什么、有什么性质等内容。4.3.1 导数假如你是全程马拉松选手&#xff0c;在开始的10分钟内跑了2千米。如果要计算此时的奔跑速度&#xff0c;则为2/10 0.2&#xff3b;千米/分&#xff3d;。也就是说&#x…

Jenkins 监控方案:Prometheus + Grafana 实践

这两天在运维群里面看到有人说 Jenkins 节点也可以监控&#xff0c;以前没想过搞这个&#xff0c;现在就对公司 Jenkins 搞搞顺便记录下呗。 一、使用 Jenkins Prometheus 插件&#xff08;推荐方式&#xff09; 1. 安装插件 在 Jenkins 插件管理里搜索并安装 Prometheus Me…

用博图FB类比c#中sdk的api

我有一个大胆的想法我准备自己做个简单的视觉软件来锻炼自己的c#编程能力&#xff0c;我准备用到海康工业机器人官网下载的mvs软件的sdk,听说sdk的主要作用就是api提供了开放的接口给第三方免费调用。按照我的理解&#xff0c;api接口就像西门子博图的FB块&#xff0c;所谓api接…

【Leetcode】高频SQL基础题--1164.指定日期的产品价格

【Leetcode】高频SQL基础题–1164.指定日期的产品价格 要求&#xff1a;一开始&#xff0c;所有产品价格都为 10。编写一个解决方案&#xff0c;找出在 2019-08-16 所有产品的价格。 以 任意顺序 返回结果表。解题思路&#xff1a; 找到 2019-08-16 前所有有改动的产品及其最新…

Django全局异常处理全攻略

在 Django 中处理全局异常&#xff0c;有几种常见的方式&#xff0c;通常目标是&#xff1a; 捕获项目中未被单独处理的错误统一返回给前端&#xff08;如 JSON 响应 / 自定义错误页&#xff09;方便记录日志1. 使用 Django 自带的全局异常处理机制 Django 有一些内置的全局错误…

【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

MyBatis入门到精通:CRUD实战指南

1. MyBatisORM&#xff1a;对象关系映射O&#xff08;Object&#xff09;&#xff1a;Java虚拟机中的Java对象R&#xff08;Relational&#xff09;&#xff1a;关系型数据库M&#xff08;Mapping&#xff09;&#xff1a;将Java虚拟机中的Java对象映射到数据库表中一行记录&am…

WebRTC开启实时通信新时代

摘要&#xff1a;WebRTC&#xff08;Web实时通信&#xff09;是一项开源技术&#xff0c;支持浏览器直接进行低延迟音视频通信和数据传输&#xff0c;无需安装插件。其核心技术包括RTCPeerConnection&#xff08;建立点对点连接&#xff09;、MediaStream&#xff08;媒体流处理…