C++中using关键字介绍

C++中using关键字介绍

C++中using关键字有两种用法,using 指令(Using Directive)和using 声明(Using Declaration)

using 指令影响整个命名空间,using 声明只影响特定名称。

using 指令

定义:using 指令(Using Directive)用于引入整个命名空间。

语法:

using namespace 命名空间名;

这会将整个命名空间引入当前作用域,使得该命名空间中的所有名称都可以直接使用。

例子:

using namespace std;

// 现在可以直接使用cout、endl等std命名空间中的所有名称

cout << "Hello" << endl;

其中,namespace是 C++ 关键字,表示接下来的是一个命名空间名。std是标准库的命名空间名,是在 C++98 标准中引入的,它包含了 C++ 标准库中的所有组件。这条语句是一个 using 指令(Using Directive),它将 std 命名空间中的所有名称引入到当前作用域。std 是 C++ 标准库使用的命名空间。它包含了诸如 cout, cin, vector, string 等常用的类、函数和对象。使得 std 命名空间中的所有名称在当前作用域中可用,无需使用 std:: 前缀。例如,可以直接使用 cout 而不是 std::cout。

“using namespace std;”的替代方案:

使用特定的 using 声明(后面将解释“using 声明”),如:

using std::cout;  // 只引入 cout

using std::endl;  // 只引入 endl

cout << "Hello, World!" << endl;  // 现在可以直接使用 cout 和 endl,无需 std:: 前缀

直接使用完全限定名称,每次使用标准库或 其他命名空间中的东西时,都明确指出它来自哪个命名空间。如:

std::cout << "Hello, World!" << std::endl;  // 每次使用 cout 和 endl 时都加上 std::

下面给出一个使用using指令的简单而完整的示例,以使用using namespace std;为例。

使用 “using namespace std;”源码为:

#include <iostream>
using namespace std; // 使用using指令“using namespace std; ”

int main() {
    cout << "Hello, World!" << endl; // 现在可以直接使用 cout 和 endl,无需 std:: 前缀
    return 0;
}

若不使用 “using namespace std;”源码为:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl; // 现在使用 cout 和 endl需要 std:: 前缀
    return 0;
}

顺便提示,std是 C++ 标准库的主要命名空间。但除了 std,C++ 还有一些其他的标准命名空间和常见的非标准命名空间。例如:

std::chrono: 用于时间相关的功能,是std的子命名空间。

std::filesystem (C++17起): 用于文件系统操作。

等等

许多库和框架都定义了自己的命名空间。

自定义命名空间: 开发者可以创建自己的命名空间来组织代码,如:

namespace myproject {

    // 你的代码

}

命名空间的定义使用关键字 namespace,后跟命名空间的名称,可参见C++ 命名空间简介https://blog.csdn.net/cnds123/article/details/117959454

还可以可以为长命名空间创建别名。

using 声明

定义:using 声明(Using Declaration)用于引入特定的名称(如函数、类型或变量)到当前作用域。

语法:

using 命名空间名:: 特定名称;

这只引入特定的名称到当前作用域,而不是整个命名空间,特定名称即你想要用的命名空间中的一个标识符。

例子:

using std::cout;

using std::endl;

// 只有cout和endl可以直接使用,其他std名称仍需完全限定

cout << "Hello" << endl;

下面给出一个使用using 声明的简单而完整的示例:

#include <iostream>

using std::cout;  // 只引入 cout
using std::endl;  // 只引入 endl

int main() {
    cout << "Hello, World!" << endl;  // 现在可以直接使用 cout 和 endl,无需 std:: 前缀
    return 0;
}

完全限定名称

语法:

命名空间名::特定名称

完全限定名称是指包含了所有嵌套命名空间的完整名称,特定名称即你想要用的命名空间中的一个标识符。例如:

std::cout << "Hello, World!" << std::endl;

这里,std::cout和std::endl就是完全限定名称。它们明确指出这些名称来自std命名空间。

完全限定名称的优点是明确和不易混淆,但可能导致代码冗长。using声明则可以简化代码,但过度使用可能导致名称冲突。

在实际编程中,通常会根据具体情况选择使用完全限定名称还是using声明,以平衡代码的清晰度和简洁性。

下面给出一个使用完全限定名称的简单而完整的示例:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;  // 每次使用 cout 和 endl 时都加上 std::
    return 0;
}

using 指令(Using Directive)和using 声明(Using Declaration)区别

using 指令(Using Directive)

优点:

    使用方便,可以快速访问整个命名空间的所有成员。

    在编写小型程序或快速原型时可以减少输入。

缺点:

    可能导致名称冲突,特别是在大型项目中。

    降低代码的可读性,因为不清楚某个名称来自哪个命名空间。

    可能引入不必要的名称到当前作用域,增加编译时间。

using 声明(Using Declaration)

优点:

    更精确,只引入需要的特定名称,减少名称冲突的风险。

    提高代码可读性,因为明确了使用的具体名称。

    不会引入不必要的名称,可能略微提高编译速度。

缺点:

    对于频繁使用的名称,可能需要多次 using 声明。

    在某些情况下可能显得较为繁琐。

总的来说,using 声明通常被认为是更好的实践,特别是在大型项目中。它提供了更好的控制和清晰度。然而,在一些简单的情况下,using 指令可能更为方便。

using 指令、using 声明放置位置

一般来而言:

    避免在全局作用域使用 using namespace std;,特别是在头文件中。

    优先在最小必要的作用域内使用 using 声明或指令。

    在函数或块作用域内使用 using 是最安全的做法。

    尽量使用特定的 using 声明,而不是使用 using 指令。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真&#xff0c;分别对YAW&#xff0c;PITCH&#xff0c;ROL…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

互联网盲盒小程序的市场发展前景如何?

近几年来&#xff0c;盲盒成为了大众热衷的消费市场。盲盒是一个具有随机性和惊喜感&#xff0c;它能够激发消费者的好奇心&#xff0c;在拆盲盒的过程中给消费者带来巨大的愉悦感&#xff0c;在各种的吸引力下&#xff0c;消费者也愿意为各类盲盒买单。如今&#xff0c;随着盲…

暑假提升(2)[平衡二叉树之一--AVL树]

我不去想未来是平坦还是泥泞&#xff0c;只要热爱生命一切&#xff0c;都在意料之中。——汪国真 AVLTree 1、诞生原因2、什么是AVL树3、如何设计AVL树3、1、AVL树节点的定义3、2、AVL树的插入3、3、平衡因子那些事3、3、1、平衡因子-2/2下的简单情况3、3、2、平衡因子-2/2下的…

tkinter拖入txt文本并显示

tkinter拖入txt文本并显示 效果代码 效果 代码 import tkinter as tk from tkinter import scrolledtext from tkinterdnd2 import DND_FILES, TkinterDnDdef drop(event):file_path event.data.strip({})if file_path.endswith(.txt):with open(file_path, r, encodingutf-8…

K8s 的最后一片拼图:dbPaaS

K8s 的发展使得私有云跟公共云之间的技术差不断的缩小&#xff0c;不管是在私有云还是公共云&#xff0c;大家今天都在基于 K8s 去开发 PaaS 系统。而 K8s 作为构建 PaaS 的基础&#xff0c;其全景图里还缺最后一块“拼图”——dbPaaS。作为一个云数据库行业干了十几年的资深从…

urfread刷算法|构建一棵树

大意 示例标签串&#xff1a; 处理结果&#xff1a; 题目1 根据标签串创建树 需求 需求&#xff1a;给出一个字符串&#xff0c;将这个字符串转换为一棵树。 字符串可以在代码里见到&#xff0c;是以#开头&#xff0c;按照\分割的字符串。 你需要将这个字符串&#xff0…

【鸿蒙学习笔记】@Prop装饰器:父子单向同步

官方文档&#xff1a;Prop装饰器&#xff1a;父子单向同步 [Q&A] Prop装饰器作用 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 [Q&A] Prop装饰器特点 &#xff11;・Prop装饰器不能在Entry装饰的…

Android Studio上传新项目到Gitee

一、在Gitee上创建仓库 首先需要再Gitee上创建仓库 1、在Gitee中新建仓库 2、输入仓库信息 3、生成仓库地址 创建成功会生成一个仓库地址&#xff0c;格式如下&#xff1a; https://gitee.com/test/compose_mvi_demo.git二、Android Studio 上传项目到Gitee 1、在Android …

CXL-GPU: 全球首款实现百ns以内的低延迟CXL解决方案

数据中心在追求更高性能和更低总拥有成本&#xff08;TCO&#xff09;的过程中面临三大主要内存挑战。首先&#xff0c;当前服务器内存层次结构存在局限性。直接连接的DRAM与固态硬盘&#xff08;SSD&#xff09;存储之间存在三个数量级的延迟差异。当处理器直接连接的内存容量…

Hive测试

1、数据仓库的体系结构包含四个层次&#xff0c;分别是&#xff1a; 数据源 数据存储和管理 数据服务 数据应用 2、Hive提供了类似关系数据库SQL的查询语言&#xff1a; HiveQL 3、Hive某种程度上可以看作 用户编程接口&#xff0c;本身不存储和处理数据&#xff0c;存储数据依…

CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)

文章目录 绘制纹理填充多边形(Primitive方式)1 目标2 代码2.1 main.ts绘制纹理填充多边形(Primitive方式) 1 目标 使用Primitive方式绘制绘制纹理填充多边形 2 代码 2.1 main.ts import * as Cesium from &

CDC模型

引言 聚类是一种强大的机器学习方法&#xff0c;用于根据特征空间中元素的接近程度发现相似的模式。它广泛用于计算机科学、生物科学、地球科学和经济学。尽管已经开发了最先进的基于分区和基于连接的聚类方法&#xff0c;但数据中的弱连接性和异构密度阻碍了其有效性。在这项…

职业性格测试,企业HR招聘测评最常用人才测评

关于求职测评&#xff0c;招聘中用到的人才测评&#xff0c;你们对这个话题又知道多少呢&#xff1f;为什么我会以90后为分界线&#xff0c;首先90后正是接触计算机最早的一代&#xff0c;因为小编是90后&#xff0c;更了解这个年龄段都在做什么&#xff0c;可以说90后见证了互…

【echarts】拖拽滑块dataZoom-slider自定义样式,简单适配移动端

电脑端 移动端 代码片段 dataZoom: [{type: inside,start: 0,end: 100},{type: slider,backgroundColor: #F2F5F9,fillerColor: #BFCCE3,height: 13, // 设置slider的高度为15start: 0,end: 100,right: 60,left: 60,bottom: 15,handleIcon:path://M30.9,53.2C16.8,53.2,5.3,41.…

第一周题目总结

1.车尔尼有一个数组 nums &#xff0c;它只包含 正 整数&#xff0c;所有正整数的数位长度都 相同 。 两个整数的 数位不同 指的是两个整数 相同 位置上不同数字的数目。 请车尔尼返回 nums 中 所有 整数对里&#xff0c;数位不同之和。 示例 1&#xff1a; 输入&#xff1a…

Android Studio环境搭建(4.03)和报错解决记录

1.本地SDK包导入 安装好IDE以及下好SDK包后&#xff0c;先不要管IDE的引导配置&#xff0c;直接新建一个新工程&#xff0c;进到开发界面。 SDK路径配置&#xff1a;File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这&#xff0c;…

自动化任务工具 -- zTasker v1.94 绿色版

软件简介 zTasker 是一款功能强大的自动化任务管理软件&#xff0c;以其简洁易用、一键式操作而著称。软件体积小巧&#xff0c;启动迅速&#xff0c;提供了超过100种任务类型和30多种定时/条件执行方法&#xff0c;能够满足用户在自动化方面的多样化需求。 zTasker 支持定时任…

数据结构 - C/C++ - 树

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 树的概念 结构特性 树的样式 树的存储 树的遍历 节点增删 二叉搜索树 平衡二叉树 树的概念 二叉树是树形结构&#xff0c;是一种非线性结构。 非线性结构&#xff1a;在二叉树中&#x…

分享一款可编辑本地电脑文件的在线编辑器

背景 之前见过在线版的VSCode&#xff0c;被惊讶到了。网页上竟然可以编辑电脑本地的文件&#xff0c;打破了网页无法编辑本地电脑文件的限制。一直好奇怎么做的。抽空研究了一下&#xff0c;然后发现其实也不难。 分析 先给大家介绍一下这款在线编辑器的效果。 左侧栏为文件…
最新文章