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;  // 只引入 endlint 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.mzph.cn/web/39131.shtml

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

相关文章

【Python实战因果推断】17_线性回归的不合理效果7

目录 Regression for Dummies Conditionally Random Experiments Dummy Variables Regression for Dummies 回归和正交化固然很好&#xff0c;但归根结底&#xff0c;你必须做出独立性假设。你必须假设&#xff0c;在考虑到某些协变量的情况下&#xff0c;干预看起来与随机分…

k8s 常用的命令

k8s 常用的操作 查找资源 kubectl get&#xff1a; 获取所有的资源&#xff0c;包括node、namespace、pod 、service、deployment等&#xff0c;可以展示一个或者多个资源。 创建资源 kubectl create &#xff1a;Kubernetes 的清单文件可以用 json 或 yaml 定义。 更新资源 …

SQL Error: 1054, SQLState: 42S22

SQL 错误 1054 通常与 SQL 查询中的未知列有关&#xff0c;SQLState 42S22表示列未找到错误。 解决方式&#xff1a; 检查列名&#xff1a; 确保您在SQL查询中使用的列名实际存在于您查询的表中。可能存在拼写错误或列名错误。验证表名&#xff1a; 确认SQL查询中的表名是否正…

python 获取Shopee虾皮商家店铺商品列表 虾皮api数据采集

此api接口可用于获取虾皮平台商家店铺的商品列表&#xff0c;目前land参数支持id、vn、my、th、sg、ph、tw&#xff08;印尼、越南、马来、泰国、新加坡、菲律宾、台湾&#xff09;。 若有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如下 https://shopee.tw/yue…

使用Adobe Acrobat对PDF文档进行数字签名

文章目录 前言一、使用Adobe Acrobat对PDF文档进行数字签名1.使用Adobe Acrobat打开需要进行签名的PDF文档2. 点击【查看更多】3.点击【使用证书】4.点击【数字签名】5.使用鼠标选定一个区域6.选择您需要使用的证书 → 点击【继续】7.点击【签名】8.签名成功 前言 一、使用Ado…

嵌入式C语言中指针与链表的关系详解

假定给你一块非常小的内存,这块内存只有8字节,这里也没有高级语言,没有操作系统,你操作的数据单位是单个字节,你该怎样读写这块内存呢? 注意这里的限定,再读一遍,没有高级语言,没有操作系统,在这样的限制之下,你必须直面内存读写的本质。 这个本质是什么呢? 本质…

C++中constexpr和#define定义常量的区别

在C中&#xff0c;使用 constexpr 来定义常量和使用宏 #define 有几个关键区别&#xff1a; 类型安全&#xff1a;constexpr 常量有类型&#xff0c;宏没有类型。作用域&#xff1a;constexpr 常量遵循C的作用域规则&#xff0c;而宏是文本替换&#xff0c;不遵循作用域规则。…

基于xilinx FPGA的GTX/GTH/GTY位置信息查看方式(如X0Y0在bank几)

目录 1 概述2 参考文档3 查看方式4查询总结&#xff1a; 1 概述 本文用于介绍如何查看xilinx fpga GTX得位置信息&#xff08;如X0Y0在哪个BANK/Quad&#xff09;。 2 参考文档 《ug476_7Series_Transceivers》 《pg156-ultrascale-pcie-gen3-en-us-4.4》 3 查看方式 通过…

语音大模型引领自然交互新时代,景联文科技推出高质量语音大模型数据库

近期&#xff0c;OpenAI正式发布语音大模型GPT-4o&#xff0c;可以综合利用语音、文本和视觉信息进行推理&#xff0c;扮演一个个人语音交互助手。 在音频处理方面&#xff0c;它不仅能识别和转录多种口音和方言&#xff0c;改变语音的速度音调和振动&#xff0c;还能进行声音模…

vue中数据响应式选择ref还是reactive?

vue中响应式选择ref还是reactive合适 语法上来说&#xff0c;两者都可以实现响应式&#xff0c;之所以有ref和reactive&#xff0c;是为了更加方便的将不同的数据类型分类处理。 主要区别&#xff1a;reactive只能声明对象/数组&#xff0c;ref可以响应任意数据类型&#xff…

Vue.js 中的 v-if 和 v-show

Vue.js 中的 v-if 和 v-show&#xff1a;详细解析与比较 在 Vue.js 中&#xff0c;v-if 和 v-show 是两个常用的指令&#xff0c;用于控制元素的显示和隐藏。尽管它们都能达到类似的效果&#xff0c;但它们的工作原理和适用场景有着显著的区别。本文将深入探讨这两者之间的异同…

Codeforces Round 952 (Div. 4) G. D-Function 题解 数学 数论

D-Function 题目描述 Let D ( n ) D(n) D(n) represent the sum of digits of n n n. For how many integers n n n where 1 0 l ≤ n < 1 0 r 10^{l} \leq n < 10^{r} 10l≤n<10r satisfy D ( k ⋅ n ) k ⋅ D ( n ) D(k \cdot n) k \cdot D(n) D(k⋅n)k⋅D…

mybatisplus新增数据时生成的雪花id太长前端接收不准确怎么办?

这是后端返回的&#xff1a;1807308955001573377 这是前端接收的&#xff1a;1807308955001573400 返回的long类型超过前端的最大长度了&#xff0c;渲染不了 只需要在WebMvcConfiguration配置类中重写方法&#xff0c;如下 Overrideprotected void configureMessageConver…

深度学习:C++和Python如何对大图进行小目标检测

最近在医美和工业两条线来回穿梭&#xff0c;甚是疲倦&#xff0c;一会儿搞搞医美的人像美容&#xff0c;一会儿搞搞工业的检测&#xff0c;最近新接的一个项目&#xff0c;关于瑕疵检测的&#xff0c;目标图像也并不是很大吧&#xff0c;需要放大后&#xff0c;才能看见细小的…

基于Java的跨平台移动应用开发

基于Java的跨平台移动应用开发 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨基于Java的跨平台移动应用开发&#xff0c;这是一种强大的技术方案…

使用 App Store Connect API 生成和读取分析报告

文章目录 前言安装 API Swift SDK配置 API Swift SDK生成分析报告获取所有可用的报告获取报告的分段下载分段的数据总结 前言 Apple 最近推出了50多个新的分析报告&#xff0c;其中包含数百个新的数据点和指标&#xff0c;以帮助开发者了解他们的应用程序的表现情况。 这些报…

构建安全稳定的应用:Spring Security 实用指南

前言 在现代 Web 应用程序中&#xff0c;安全性是至关重要的一个方面。Spring Security 作为一个功能强大且广泛使用的安全框架&#xff0c;为 Java 应用程序提供了全面的安全解决方案。本文将深入介绍 Spring Security 的基本概念、核心功能以及如何在应用程序中使用它来实现…

相比共享代理,为什么要用独享代理IP?

随着互联网的广泛普及和应用&#xff0c;涉及网络隐私、数据安全和网络访问控制的问题变得越来越重要。代理服务器作为一种常见的网络工具&#xff0c;可以在跨境电商、海外社媒、SEO投放、网页抓取等领域发挥作用&#xff0c;实现匿名访问并加强网络安全。在代理服务器类别中&…

Hadoop:全面深入解析

Hadoop是一个用于大规模数据处理的开源框架&#xff0c;其设计旨在通过集群的方式进行分布式存储和计算。本篇博文将从Hadoop的定义、架构、原理、应用场景以及常见命令等多个方面进行详细探讨&#xff0c;帮助读者全面深入地了解Hadoop。 1. Hadoop的定义 1.1 什么是Hadoop …

CDC模型

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