zoukankan      html  css  js  c++  java
  • Effective C++ (4) c++中的命名空间


    现在来看看下面两个include:

        #include<iostream>     // 这个就是1998年标准化以后的标准头文件

        #include<iostream.h>       // 这个就是标准化以前的头文件

        更本质上的区别就是iostream把标准C++库的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。

        看看下面这两个头文件

        // 标准化后经过改造的C的标准库,所有的组件都放在了std中

        #include<cstdio>          

        // 标准化以前C++中的C标准库

        #include<stdio.h>

        // 在看看这个头文件C标准库下 基于char* 的字符处理函数库

        #include<string.h>

        // 在标准化以后他变成了这样

        #include<cstring>

        // 但是很多朋友还看见过这个字符串处理函数库,他包含了新的string class

        #include<string>

     

    C++中的命名空间:

    在 C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的 C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用 域。
    MFC中并没有使用命名空间,但是在.NET框架、MC++和C++/CLI中,都大量使用了命名空间

     

    使用 using 声明可以在不需要加前缀 namespace_name:: 的情况下访问命名空间中的名字。using 声明的形式如下:

         using namespace::name;
    如:
    
    using namespace std;
    
    using std::cin;
    
     
    
    另一个问题是避免重复引用:
    
    头文件的包含,避免重复定义,命名空间的使用,用预处理器指令来控制代码块等等技巧。
    
    // print.h
    #ifndef PRINT_H
    #define PRINT_H
    #include <iostream>
    #include <string>
    using std::string;
    namespace print1 {
        void print(const string& s);
    }
    namespace print2 {
        void print(const string& s);
    }
    #endif
    
  • 相关阅读:
    使用winsw将jar包注册成windows服务
    windows 下redis在后台运行
    nDPI的安装和使用
    Passive DNS安装使用
    ffmpeg-join
    Subtitle-ass-srt
    spring cloud项目05:中心化配置-P03-高可用
    spring cloud项目04:中心化配置-P02
    spring cloud项目03:高可用注册中心
    spring boot项目07:日志
  • 原文地址:https://www.cnblogs.com/feisky/p/1586319.html
Copyright © 2011-2022 走看看