欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++命名空間域的實(shí)現(xiàn)示例

 更新時(shí)間:2024年01月22日 11:08:02   作者:明 日 香  
命名空間域就是一個(gè)獨(dú)立的空間外面不能直接調(diào)用該空間域只能用訪問(wèn)限定符指定訪問(wèn)該空間域,本文主要介紹了C++命名空間域的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

沖突與命名:

在C語(yǔ)言中,我們通常會(huì)使用stdlib.h 

而stdlib.h 本質(zhì)上是一個(gè)函數(shù)的庫(kù),在程序中使用的大多數(shù)函數(shù)都來(lái)自于stdlib.h

但是,當(dāng)使用久了便會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,那便是命名沖突!

舉個(gè)例子:

#include<stdio.h>
#include<stdlib.h>
int rand = 10;
int main ()
{ 
  printf("%d\n",rand);
}

結(jié)果顯而易見(jiàn),因?yàn)閞and在stdlib.h中是一個(gè)函數(shù),所以在使用stdlib.h將程序進(jìn)行擴(kuò)展后,你命名的變量極有可能會(huì)因?yàn)楹秃瘮?shù)名重復(fù),而造成沖突,但我們又不明白那些是函數(shù),那些又不是函數(shù),所以,這個(gè)問(wèn)題一直是C語(yǔ)言的不足之處!

全局與局部:

在之前的學(xué)習(xí)中,我們得知當(dāng)一個(gè)變量名同時(shí)為全局變量和局部變量時(shí),編譯器則優(yōu)先選擇局部變量,也就是所謂的就近原則。

這其實(shí)和編譯器的工作原理有關(guān),編譯器在查看到變量的存在的同時(shí),會(huì)在局部區(qū)域內(nèi)搜尋變量的存在,若該變量不存在于局部區(qū)域,編譯器則會(huì)從全局的范圍內(nèi)搜尋變量是否存在,如果還是不存在,則編譯器發(fā)生報(bào)錯(cuò)。

#include<stdio.h>
#include<stdlib.h>

int x = 0;
int main ()
{ 
  int x = 1;
  printf("%d\n",x);
}

但是當(dāng)我們不想要使用局部變量進(jìn)行打印,想要使用全局變量進(jìn)行打印和使用時(shí),又該怎么辦呢?

域作用限定符:

:: 作為域作用限定符,:: 的左邊寫域名,而右邊則寫變量名,當(dāng)左邊為空時(shí),默認(rèn)為全局變量。

#include<stdio.h>
#include<stdlib.h>

int x = 0;
int main ()
{ 
  int x = 1;
  printf("%d\n",x);
  printf("%d\n",::x);
}

使用域作用限定符后,打印出的結(jié)果便是我們想要的全局變量。

而域作用限定符的工作原理就是在編譯器進(jìn)行搜索前給編譯器指定一塊搜索區(qū)域,也就是讓編譯器在指定的區(qū)域內(nèi)部搜索,若得出結(jié)果則停下,得不到則繼續(xù)遵循就近原則。

 命名空間域:

通過(guò)域作用限定符我們可以在局部變量名和全局變量名重名時(shí)使用全局變量名,但僅僅只是如此嗎?

當(dāng)然不是,為了更方便的使用域作用限定符或者說(shuō)更好的調(diào)用其他范圍內(nèi)的變量,我們可以才用命名空間域

namespace 空間名{

}

 如上代碼所示,命名空間域的作用就是將需要調(diào)用的變量封裝起來(lái),并且定義空間的名字,方便擺放在 域作用限定符的 左邊 以便使用。

#include<stdio.h>
#include<stdlib.h>


namespace bit1 
{
    int x = 0;
}

namespace bit2
{
    int x = 1;
}

int main ()
{ 

  printf("%d\n",bit1::x);

  printf("%d\n",bit2::x);

  return 0;
}

 而且命名空間域可以將內(nèi)部的變量和外部進(jìn)行隔離,這使得在同一個(gè)區(qū)域內(nèi),即使變量名一樣,它們也不會(huì)發(fā)生報(bào)錯(cuò),因?yàn)樗鼈兎謩e被命名空間域封裝了。

當(dāng)然命名空間域的作用不止如此,它的內(nèi)部還可以存放其他函數(shù),或者結(jié)構(gòu)體。

#include<stdio.h>
#include<stdlib.h>


namespace bit1 
{
    int x = 0;

    int ADD (int left , int right)
    {
              
        return left+right;
 
    }
}

namespace bit2
{
    int x = 1;

    struct Node {
         
       struct Node * next;
       int val;
    }
}

int main ()
{ 

  printf("%d\n",bit1::x);

  printf("%d\n",bit2::x);

  
  //使用ADD函數(shù)
  printf("%d\n",bit1::ADD(1,2));

  //定義結(jié)構(gòu)體變量
  struct bit2::Node phead;

  return 0;
}

但是,命名空間的寫法不是很方便,而且每次使用的時(shí)候都需要加上::和空間的名字

于是就有了一種全新的寫法。

using namespace 空間名;

如果說(shuō),頭文件是一種內(nèi)容的拷貝復(fù)制,那么 using namespace 就是一種權(quán)限的打開(kāi)。

使用了 using namespace 就意味著,它身后的空間名允許訪問(wèn),并且在通常的情況下,使用了usiing namespace 的命名空間域,它內(nèi)部的變量就相當(dāng)于全局變量.

#include<iostream>

using namespace std;

int main()
{
    cout << "hello world"<< endl;
    return 0;
}
  • std : 這里面的std表示的是所有c++庫(kù)的命名空間
  • <iostream> :這個(gè)是c++的命名庫(kù)所在的文件名,但是它還被std這個(gè)命名空間封裝了,所以如果不使用using namespace std 就不能展開(kāi)命名空間,就用不了這個(gè)庫(kù)中的內(nèi)容。

如果不展開(kāi)空間則只能使用這種方式:

到此這篇關(guān)于C++命名空間域的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C++命名空間域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 使用C語(yǔ)言操作文件的基本函數(shù)整理

    使用C語(yǔ)言操作文件的基本函數(shù)整理

    這篇文章主要介紹了使用C語(yǔ)言操作文件的基本函數(shù)整理,包括創(chuàng)建和打開(kāi)以及關(guān)閉文件的操作方法,需要的朋友可以參考下
    2015-08-08
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C語(yǔ)言詳解結(jié)構(gòu)體的內(nèi)存對(duì)齊與大小計(jì)算

    C語(yǔ)言詳解結(jié)構(gòu)體的內(nèi)存對(duì)齊與大小計(jì)算

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來(lái)了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊與計(jì)算大小
    2022-04-04
  • vscode+platformIO開(kāi)發(fā)stm32f4的實(shí)現(xiàn)

    vscode+platformIO開(kāi)發(fā)stm32f4的實(shí)現(xiàn)

    這篇文章主要介紹了vscode+platformIO開(kāi)發(fā)stm32f4的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)猜數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 分享一下8年C++面向?qū)ο笤O(shè)計(jì)的經(jīng)驗(yàn)體會(huì)

    分享一下8年C++面向?qū)ο笤O(shè)計(jì)的經(jīng)驗(yàn)體會(huì)

    關(guān)于C++程序設(shè)計(jì)的書藉非常多,本章不講C++的語(yǔ)法,只講一些小小的編程道理。如果我能早幾年明白這些小道理,就可以大大改善數(shù)十萬(wàn)行程序的質(zhì)量了
    2017-07-07
  • C++設(shè)計(jì)模式之單例模式詳解

    C++設(shè)計(jì)模式之單例模式詳解

    這篇文章主要介紹了C++設(shè)計(jì)模式之單例模式,本文同時(shí)給出了數(shù)種單例模式的實(shí)現(xiàn)代碼,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • C語(yǔ)言中scanf函數(shù)的原樣輸入的坑及解決

    C語(yǔ)言中scanf函數(shù)的原樣輸入的坑及解決

    這篇文章主要介紹了C語(yǔ)言中scanf函數(shù)的原樣輸入的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)的PNPoly算法代碼例子

    C語(yǔ)言實(shí)現(xiàn)的PNPoly算法代碼例子

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的PNPoly算法代碼例子,PNPoly算法j是判斷一個(gè)坐標(biāo)點(diǎn)是否在不規(guī)則多邊形內(nèi)部的算法,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言編程實(shí)例之輸出指定圖形問(wèn)題

    C語(yǔ)言編程實(shí)例之輸出指定圖形問(wèn)題

    這篇文章主要介紹了C語(yǔ)言編程實(shí)例之輸出指定圖形問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評(píng)論