C++ include和using namespace

部分内容引用至:https://blog.csdn.net/u013719339/article/details/80221899
include是把整个文件复制进来,
using namespace这会告诉编译器,每次它看到一个类型(比如向量)时,还要检查命名空间std,因为定义可能在那里;如果要使用的命名空间不在当前文件,需要include进来,然后才能使用using namespace。

include与using namespace无必然联系功能也不一样。

  • Include

    • #include "math.h",就是编译的时候把文件内容全部都加载进来
      c是.h;c++后面没有,例如:

      #include "math.h"
      #include <cmath>
      

      #include <>#include "" 都会在实现定义的位置查找文件,并将其包含。
      区别是若 #include "" 查找成功,则遮蔽 #include <> 所能找到的同名文件;否则再按照#include <>的方式查找文件。另外标准库头文件都放在 #include <> 所查找的位置。

      一般来说 #include <> 的查找位置是标准库头文件所在目录, #include "" 的查找
      位置是当前源文件所在目录。不过这些都可由编译器调用参数等配置更改。

    • .h文件注意点
      声明可以重复,定义不能重复。在.h文件中定义变量或函数,当不同的.cpp文件include就会导致多重定义错误
      .h初衷是为了解决每次使用一个其他文件的函数就要声明一次的问题。
      注意不要在.h文件中using namespace stdusing std:cout,因为会导致以下问题:

      1. 同一类型string ,在不同空间定义同时使用using namespace导入,会导致编译器选错类型,且不易找出。
      2. using namespace stdusing std:cout的变量cout与本地文件内变量cout冲突,尽量在方法内部使用using std:cout
      3. using namespace stdusing std:cout的变量cout与其他命名空间之间也会存在冲突,报不确定性错误。
        .cpp可做下面的事:
            (1) 全局函数定义,全局变量定义
            (2) 静态函数定义、静态变量定义。(指定编译单元内部使用的函数和变量),程序优先使用内部的。
            (3) 静态函数声明(指 static void test();)、静态变量声明(指 static int a)。
        .h内可做下面的事:
            (1) 全局函数声明,无静态函数。
            (2) 全局变量声明(指 extern int a),无静态变量。
  • using namespace
    using namespace std;
    是指标识符的各种可见范围。C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此群组的名字。可以防止命名冲突。

    1. 命名空间内函数或者变量使用方式:
      第一种:using namespace std,然后使用函数或者变量 cout
      第二种:using std::cout,然后使用函数或者变量 cout
      第三种:命名空间冒号后面接函数或者变量 std::cout
    2. 命名空间通过下面的方式在其他文件被调用:
      最外层命名空间只能定义在.h中
    3. 命名空间下 可以放函数、变量、结构体、类,命名空间可以嵌套命名空间,
    4. 最外层命名空间必须定义在全局作用域下,.h.cpp都可以,
    5. 命名空间是开放的,可以随时在原先的命名空间添加内容,只能对.h和当前文件合并
      通过合并方式,且只能在当前文件使用
    6. 命名空间可以无名,相当于写了 static int m_c,只能在当前文件内使用
    7. 命名空间可以使用别名
    8. 局部变量和命名空间变量冲突,命名空间之间变量冲突;所有尽量不要用using
      using namespace std是编译指令
      using std::cout是声明
      就近原则高于编译指令
      就近原则和声明等级一样,就会出现二义性
      int atk () {
      int cout = 10;
      using std:cout;
      using wd:cout;
      using abk;
      return cout;
      }
      方法内局部变量cout和using std::cout,就近原则和声明,等级一样,就会出现二义性
      使用两个及以上命名空间相同变量,同时编译指令或者声明指令,等级一样,也会出现二义性。


      使用 namespace

      起别名
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容