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的基于类调用还是有区别的。语法糖只是糖,又不能当饭吃。理解这些也没什么用,没事写写总结一下。

  • 相关阅读:
    D3D中的渲染状态简介
    D3D HOOK实现透视讲解
    引入外部文件的时候为什么省略http:
    hbase java Api练习
    [待解决]ColumnPrefixFilter 不能过滤出全部满足条件的,
    代码风格
    eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
    hbase练习题
    hive安装
    脚本 sh 和 ./ 的区别,exec和source
  • 原文地址:https://www.cnblogs.com/flashbird/p/4425183.html
Copyright © 2011-2022 走看看