c++——::作用域、命名空间、using(声明和编译指令)

c++ 作用域和名字控制

一、::(双冒号) 作用域

<::>运算符是一个作用域如果<::>前面什么都没有加 代表是全局作用域

二、命名空间(namespace)

1、namespace

本质是作用域,可以更好的控制标识符的作用域命名空间 就可以存放 变量 函数 类 结构体 …

2、命名空间的使用

1、命令空间的定义:必须定义在全局范围
2、命名空间下可以存放 变量函数 结构体 类
3、命名空间可以重名 重名的命名空间相当于做合并4、操作命名空间可以嵌套命名空间
5、命名空间可以取别名
6、命名空间可以没有名字
7、命名空间中的函数可以先声明,在外部定义。定义时需要加上命名空间作用域

#include <iostream>
using namespace std;namespace A
{int a = 10;void fun(){cout << "hello namespace" << endl;}void function(int val);
}
void A :: function(int val){cout << "hello function" <<endl;
}
namespace B
{int a = 10;int b = 20;
}
namespace C
{int a = 20;namespace D{int a = 10;}
}void print(){cout << "namespaceA a = " << A :: a <<endl;cout << "namespaceB a = " << B :: a << endl;cout << "namespaceB b = " << B :: b << endl;A :: fun();cout << "namespaceD a = " << C :: D :: a << endl;
}int main(){print();
}

3、无名字的命名空间

如果命名空间没有名字那么这个命名空间内的所有成员都被编译器加上了static修饰
只能被当前文件调用 这个属于内部链接属性

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

4、命名空间取别名

namespace newname = oldname; 

三、using声明和using编译指令

1、using声明:
如果在某个空间内的变量过对象或函数要频繁的访问,不想次次都要加上::(双冒号作用域)时就可以用到using声明。

#include <iostream>
using namespace std;
namespace A 
{int a = 100;void index(){cout << "hello" << endl;}
}void fun(){
//多次访问A下面的a旧的加上作用域::cout << A :: a << endl;cout << A :: a << endl;cout << A :: a << endl;//那可以用using来声明解决不要每次都要写这个作用域using A ::a;cout << a << endl;cout << a << endl;cout << a << endl;index();
}int main(){return 0
}

注意:当using声明的标识符和其他标识符有作用域的冲突时,会产生二义性

void fun(){int a = 10;//errusing A ::a;cout << a << endl;cout << a << endl;cout << a << endl;
}

2、using编译指令:
使得整个命名空间标识符可用。

namespace nameA
{int a = 10;void fun(){cout << "hello" << endl;}
}void function(){int a = 100;//如果在using编译指令前也一个相同的变量,就不会像using声明一样有冲突。using namespace nameA;//此时a的值是局部变量的值100cout << a << endl;fun();
}

建议用using编译指令取代using声明来使用。

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

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

相关文章

【kubernetes】在k8s集群环境上,部署kubesphere

部署kubesphere 学习于尚硅谷kubesphere课程 前置环境配置-部署默认存储类型 这里使用nfs #所有节点安装 yum install -y nfs-utils# 在master节点执行以下命令 echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports # 执行以下命令&#xff…

QML与C++交互

目录 1 QML获取C的变量值 2 QML获取C创建的自定义对象 3 QML发送信号绑定C端的槽 4 C端发送信号绑定qml端槽 5 C调用QML端函数 1 QML获取C的变量值 QQmlApplicationEngine engine; 全局对象 上下文属性 QQmlApplicationEngine engine; QQmlContext *context1 engine.…

flowable流程移植新项目前端问题汇总

flowable流程移植到新项目时&#xff0c;出现一些前端问题&#xff0c;汇总如下&#xff1a; PS F:\khxm\NBCIO_VUE> yarn run serve yarn run v1.21.1 $ vue-cli-service serve INFO Starting development server... ERROR Error: Vue packages version mismatch: -…

25 | 葡萄酒质量数据分析

基于kaggle提供的公开数据集,对全球葡萄酒分布情况和质量情况进行数据探索和分析 from kaggle: https://www.kaggle.com/zynicide/wine-reviews 分析思路: 0、数据准备 1、葡萄酒的种类 2、葡萄酒质量 3、葡萄酒价格 4、葡萄酒描述词库 5、品鉴师信息 6、总结 0、数据准备 …

学习Vue:组件的概念和优势

在现代的前端开发中&#xff0c;组件化开发是一种重要的方法&#xff0c;它可以将复杂的应用程序拆分成多个独立的、可复用的组件。Vue.js 是一个流行的前端框架&#xff0c;它支持组件化开发&#xff0c;让开发者能够更轻松地构建和维护复杂的用户界面。在本文中&#xff0c;我…

计算机组成部分

计算机的五大部件是什么&#xff1f;答案&#xff1a;计算机的五大部件是运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备和输出设备。 其中运算器和控制器合称中央处理器&#xff0c;是计算机的核心部件&#xff1b; 存储器是用来存储程序指令和数据用的&am…

修改第三方组件默认样式

深度选择器 修改el-input的样式&#xff1a; <el-input class"input-area"></el-input>查看DOM结构&#xff1a; 原本使用 /deep/ 但是可能不兼容 使用 :deep .input-area {:deep(.el-input__inner){background-color: blue;} }将 input 框背景色改为…

【Kubernetes】Kubernetes的Pod进阶

Pod进阶 一、资源限制和重启策略1. 资源限制2. 资源单位2.1 CPU 资源单位2.2 内存 资源单位 3. 重启策略&#xff08;restartPolicy&#xff09; 二、健康检查的概念1. 健康检查1.1 探针的三种规则1.2 Probe 支持三种检查方法 2. 示例2.1 exec 方式2.2 httpGet 方式2.3 tcpSock…

临床试验三原则-对照、重复、随机

临床试验必须遵循三个基本原则&#xff1a;对照、重复、随机。 一、对照原则和对照的设置 核心观点&#xff1a;有比较才有鉴别。 对照组和试验组同质可比。 三臂试验 安慰剂&#xff1a;试验组&#xff1a;阳性对照组1&#xff1a;n&#xff1a;m&#xff08;n≥m&#xff…

FFmpeg常见命令行(五):FFmpeg滤镜使用

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。本文是音视频系…

Nginx反向代理服务流式输出设置

Nginx反向代理服务流式输出设置 1.问题场景 提问&#xff1a;为什么我部署的服务没有流式响应 最近在重构原有的GPT项目时&#xff0c;遇到gpt回答速度很慢的现象。在使用流式输出的接口时&#xff0c;接口响应速度居然还是达到了30s以上。 2.现象分析 分析现象我发现&…

Leetcode链表篇 Day3

.24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 1.构建虚拟结点 2.两两一组&#xff0c;前继结点一定在两两的前面 3.保存结点1和结点3 19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 1.双指针&#xff1a;快慢指针 两个指针的差…

新能源汽车需要检测哪些项目

截至2022年底&#xff0c;中国新能源车保有量达1310万辆&#xff0c;其中纯电动汽车保有量1045万辆。为把好新能源汽车安全关&#xff0c;我国新能源汽车除了完善的强制性产品认证型式实验外&#xff0c;还建立了“车企-地方-国家”逐级上报的三级监管体系实行新能源汽车全生命…

2023.8.14论文阅读

文章目录 ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation摘要本文方法实验结果 DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection摘要本文方法实验结果 ESPNet: Efficient Spatial Pyramid of Dilated Convo…

vue 路由地址把#去掉

在路由对象里边添加history模式就不显示# mode:history // 4.通过规则创建对象 const router new VueRouter({routes,// 默认模式为hash 带# // history 不带#mode:history })想把端口号8000换成其他的 比如我这样的3000更换端口号教程

Android Framework 动态更新插拔设备节点执行权限

TF卡设备节点是插上之后动态添加&#xff0c;所以不能通过初始化设备节点权限来解决&#xff0c;需要监听TF插入事件&#xff0c;在init.rc 监听插入后动态更新设备节点执行权限 添加插拔TF卡监听 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

IL汇编ldc指令学习

ldc指令是把值送到栈上&#xff0c; 说明如下&#xff0c; ldc.i4 将所提供的int32类型的值作为int32推送到计算堆栈上&#xff1b; ldc.i4.0 将数值0作为int32推送到计算堆栈上&#xff1b; ... ldc.i4.8 将数值8作为int32推送到计算堆栈上&#xff1b; ldc.i4.m1 将数值-…

Stable Diffusion 告别复制关键词,高质量提示词自动生成插件

在使用SD时,我们经常会遇到心中无想法,或不知如何描述心中所想的图像。有时由于提示词的选择不当,生成的图片质量也不尽如人意。为此,我今天为大家推荐一个高质量的提示词自动生成插件——One Button Prompt。 下面是他生成的一些样图。 文章目录 插件安装插件说明主菜单工…

用python绘制CDF图

一、code import os.pathimport pandas as pd import numpy as np import matplotlib.pyplot as pltcsv_path r"XXX.csv" save_fig_path os.path.join(os.path.split(csv_path)[0], "metrics_cdf.png")# 从CSV读取数据 data pd.read_csv(csv_path)[XXX…

Android 屏幕适配资源xml的配置方法

在 Android 中进行屏幕适配是确保应用在不同设备上正常显示的重要步骤之一。资源文件夹的配置是实现屏幕适配的关键之一&#xff0c;以下是一些常见的资源文件夹配置方法&#xff0c;以适应不同屏幕尺寸和密度。 不同屏幕尺寸的适配&#xff1a; res/layout&#xff1a;通常存放…