zoukankan      html  css  js  c++  java
  • 命名空间的冷思考

    在说命名空间之间,我们先思考一个问题:学习过Java,我见过不只一个都在说#include <filename.h> or #include "filename.h"其实就是和Java里面的import是一个性质的。真的是这样的吗?

    就从Java谈起,为什么需要import这个语句,是因为分包,那么为什么需要分包,防止类的重命名造成语义的二义性,为什么仅仅是分包就能有效避免类名重复造成的二义性呢,因为Java一个class文件名必须和内部声明的一个pulic类名保持一致。这个推理很正常吧。import只是提供了一种外部类,并作以区分。因为Java是纯面向对象语言,所有的操作都是基于类调用,所以import将各个包下的代码汇总到了一起。

    那么C++当中的头文件的作用呢,其实就一个引入类,变量,函数的声明,供另外一处使用,并且通过不重复引入头文件从而实现声明的不重复罢了。显然C++的头文件,只是起到了声明的作用,不包含引入,也不包含二义性的划分,同样也不是将各个文件统一起来的作用,只是引入声明。

    那么我们说到这次的主题,命名空间。

    我们来看命名空间的作用,用来区分重复函数名和变量名的二义性,这个其实就已经是类似于Java里面分包的概念了。我们通过using namespace std;这样来区分不同包下面的函数或者变量等。这么来理解功能看,其实命名空间才using namespace更接近于java里面的import概念。

    最后说明一下,由于C++基于C语言的沿革而来的,先声明才能使用的逻辑并没有发生变化,和Java这种纯OO的基于类调用还是有区别的。语法糖只是糖,又不能当饭吃。理解这些也没什么用,没事写写总结一下。

  • 相关阅读:
    Gvim快捷键学习
    一步一步学习Vim 全图解释
    经典vim插件功能说明、安装方法和使用方法介绍
    中国数学数字图书馆
    RQNOJ第一题---PID1 / 明明的随机数
    gdb常用命令
    linux c下mysql编程样例
    linux c编程 -- 线程互斥
    linux c多线程编程范例
    数据结构 -- 可重用模块的接口设计模板
  • 原文地址:https://www.cnblogs.com/flashbird/p/4425183.html
Copyright © 2011-2022 走看看