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

C++ Primer 命名空间的using声明

欢迎阅读我的 【C++Primer】专栏

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

在这里插入图片描述
在这里插入图片描述

目录

  • 命名空间的using声明
    • 每个名字都需要独立的using声明
    • 头文件不应包含using声明

命名空间的using声明

目前为止,我们用到的库函数基本上都属于命名空间std,而程序也显式地将这一点标示了出来。例如,std::cin表示从标准输入中读取内容。此处使用作用域操作符(::)的含义是:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。因此,std::cin的意思就是要使用命名宇间std中的名字cin。

上面的方法显得比较烦琐,然而幸运的是,通过更简单的途径也能使用到命名空间中的成员。本节将学习其中一种最安全的方法,也就是使用using声明(using declaration)会介绍另一种方法。

有了using声明就无须专门的前缀(形如命名空间::)也能使用所需的名字了。using声明具有如下的形式:

using namespace::name;

一旦声明了上述语句,就可以直接访问命名空间中的名字:

#include<iostream>
//using声明,当我们使用名字cin时,从命名空间std中获取它
using std::cin;

int main()
{
    int i;
    cin >> i;//正确:cin和std::cin含义相同
    cout << i
    //错误:没有对应的using声明,必须使用完整的名字
    std::cout<< i;//正确:显式地从std中使用cout
    return 0;
}

每个名字都需要独立的using声明

按照规定,每个using声明引入命名空间中的一个成员。例如,可以把要用到的标准库中的名字都以using声明的形式表示出来,程序如下:

    #include<iostream>
    //通过下列using声明,我们可以使用标准库中的名守
    using std::cin;
    using std::cout;
    using std::endl;
    int main()
    {
        cout<<"Enter two numbers: "<<endl;
        int v1, v2;
        cin>>v1>>v2;
        cout<< "The sum of "<<v1<<"and"<<v2 << "is" << v1 + v2 <<endl;
        return 0;
    }

在上述程序中,一开始就有对cin、cout和endl的using声明,这意味着我们不用再添加std::形式的前缀就能直接使用它们。C++语言的形式比较自由,因此既可以一行只放一条using声明语句,也可以一行放上多条。不过要注意,用到的每个名字都必须有自己的声明语句,而且每句话都得以分号结束。

头文件不应包含using声明

位于头文件的代码一般来说不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突。


http://www.kler.cn/a/530077.html

相关文章:

  • tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析
  • LabVIEW如何高频采集温度数据?
  • 使用朴素贝叶斯对散点数据进行分类
  • Leetcode::81. 搜索旋转排序数组 II
  • 因果推断与机器学习—用机器学习解决因果推断问题
  • 【leetcode练习·二叉树】计算完全二叉树的节点数
  • 2025最新在线模型转换工具onnx转换ncnn,mnn,tengine等
  • mysql死锁排查_mysql 死锁问题排查
  • 解密全同态加密中的自举(Bootstrapping)
  • CKA 不假题 练习笔记 (四)
  • 80-《红球姜》
  • 在实际开发中,如何正确使用 INT(1) 和 INT(10)
  • 动态规划学习
  • Rust语言的编程范式
  • 虚幻UE5手机安卓Android Studio开发设置2025
  • 996引擎-地图:动态创建副本地图
  • 音视频入门基础:RTP专题(7)——RTP协议简介
  • 第一篇:从技术架构视角解析DeepSeek的AI底层逻辑
  • 揭秘算法 课程导读
  • 复制粘贴小工具——Ditto
  • 【系统架构设计师】真题论文: 论微服务架构及其应用(包括解题思路和素材)
  • AI智慧社区--Excel表的导入导出
  • < 自用文儿 使用 acme 获取网站证书 > ACME 脚本 script: acme.sh 获得证书 觉得比 certbot 方便
  • 深入理解计算机系统:揭开计算机科学的神秘面纱
  • MFC程序设计(六)消息和控件
  • Spring Boot 实例解析:配置文件占位符