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

c++ using 关键字

在C++中,using 关键字有多种用途,但最常见的用途之一是在命名空间(namespace)中引入名称,以避免在代码中频繁使用命名空间前缀。此外,using 还可以用于类型别名(typedef 的替代品)和模板声明。

1. 命名空间中的名称引入

假设我们有一个名为 std::vector 的类型,它位于 std 命名空间中。为了简化代码,我们可以使用 using 声明来引入这个类型,而无需在每次使用它时都加上 std:: 前缀。

using std::vector; // 现在可以在代码中直接使用 vector,而不是 std::vector
vector<int> myVector;

但是,如果你在一个较大的项目或库中工作,通常建议明确指定命名空间,以避免命名冲突。

2. 类型别名

从C++11开始,using 也可以用作类型别名,类似于 typedef

using IntVector = std::vector<int>; // 使用 using 声明类型别名
IntVector myVector; // 相当于 std::vector<int> myVector;

3. 模板声明

在模板编程中,using 关键字也被用来声明模板别名,这在C++14及以后的版本中变得非常有用。

template<typename T>
using VectorOfPtr = std::vector<T*>; // 模板别名VectorOfPtr<int> intPtrVector; // 相当于 std::vector<int*> intPtrVector;

4. using指令

除了 using 声明(declaration)之外,还有 using 指令(directive),它可以将整个命名空间的内容引入到当前作用域中。

using namespace std; // 使用 using 指令引入 std 命名空间中的所有名称
cout << "Hello, World!"; // 现在可以直接使用 cout,而无需 std::cout

但是,过度使用 using namespace 指令可能会导致命名冲突,因此通常在头文件或大型项目中避免使用它。相反,在源文件的开始部分使用它是可以的,因为它只会影响该文件的作用域。

相关文章:

  • React 路由5版本的使用详解(基于Class类版本的使用react-router-dom@5)
  • 【编译原理复习笔记】中间语言
  • RK 11.0 多屏模式下修改鼠标进入方式
  • Web3 知识体系架构图
  • Shell编程规范与变量
  • VMware安装Windows11
  • ISCC——AI
  • getters的使用
  • uniapp开发微信小程序问题集锦(1)
  • Hadoop概览以及编译hadoop说明
  • SpringBoot高级原理详解
  • 【MyBatis】MyBatis解析全局配置文件源码详解
  • 深度神经网络详解
  • 同旺科技 FLUKE ADPT 隔离版发布 ---- 3
  • pycharm配置python开发环境—miniconda+black+gitlab
  • 【347天】每日项目总结系列085(2018.01.18)
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • CAP理论的例子讲解
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CODING 缺陷管理功能正式开始公测
  • co模块的前端实现
  •  D - 粉碎叛乱F - 其他起义
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript的使用你知道几种?(上)
  • JS函数式编程 数组部分风格 ES6版
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对超线程几个不同角度的解释
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 入手阿里云新服务器的部署NODE
  • 十年未变!安全,谁之责?(下)
  • 使用agvtool更改app version/build
  • 通过几道题目学习二叉搜索树
  • 用element的upload组件实现多图片上传和压缩
  • 智能合约Solidity教程-事件和日志(一)
  • No resource identifier found for attribute,RxJava之zip操作符
  • 树莓派用上kodexplorer也能玩成私有网盘
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (动态规划)5. 最长回文子串 java解决
  • (理论篇)httpmoudle和httphandler一览
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (未解决)macOS matplotlib 中文是方框
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)EOS中账户、钱包和密钥的关系
  • (转载)Linux网络编程入门
  • ****三次握手和四次挥手
  • ***检测工具之RKHunter AIDE
  • ***通过什么方式***网吧
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil