最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

沖突與命名:

在C語言中,我們通常會使用stdlib.h 

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

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

舉個例子:

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

結(jié)果顯而易見,因為rand在stdlib.h中是一個函數(shù),所以在使用stdlib.h將程序進行擴展后,你命名的變量極有可能會因為和函數(shù)名重復(fù),而造成沖突,但我們又不明白那些是函數(shù),那些又不是函數(shù),所以,這個問題一直是C語言的不足之處!

全局與局部:

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

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

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

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

但是當我們不想要使用局部變量進行打印,想要使用全局變量進行打印和使用時,又該怎么辦呢?

域作用限定符:

:: 作為域作用限定符,:: 的左邊寫域名,而右邊則寫變量名,當左邊為空時,默認為全局變量。

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

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

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

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

 命名空間域:

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

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

namespace 空間名{

}

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

#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)部的變量和外部進行隔離,這使得在同一個區(qū)域內(nèi),即使變量名一樣,它們也不會發(fā)生報錯,因為它們分別被命名空間域封裝了。

當然命名空間域的作用不止如此,它的內(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;
}

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

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

using namespace 空間名;

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

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

#include<iostream>

using namespace std;

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

如果不展開空間則只能使用這種方式:

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

相關(guān)文章

  • C++詳解鏈棧的實現(xiàn)

    C++詳解鏈棧的實現(xiàn)

    今天我們學(xué)習(xí)的是鏈棧,也就是說棧的鏈式結(jié)構(gòu),我們運用順序鏈的方式來實現(xiàn)。首先呢,鏈棧是不存在存儲空間滿的情況的,所以可以說它是個無底洞,然而我們之前學(xué)的順序棧是有額定空間的
    2022-06-06
  • QT實現(xiàn)簡單計算器功能

    QT實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了QT實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • C語言實現(xiàn)從指定位置截取文件內(nèi)容

    C語言實現(xiàn)從指定位置截取文件內(nèi)容

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)從指定位置截取文件內(nèi)容,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Qt5升級到Qt6分步遷移教程小結(jié)

    Qt5升級到Qt6分步遷移教程小結(jié)

    Qt框架的一個新的長期支持版本6.5最近發(fā)布,本文主要介紹了Qt5升級到Qt6分步遷移教程小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • C語言動態(tài)內(nèi)存管理深入探討

    C語言動態(tài)內(nèi)存管理深入探討

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-06-06
  • 一文讀懂C++中指針和內(nèi)存分配

    一文讀懂C++中指針和內(nèi)存分配

    我們知道聲明的所有變量在內(nèi)存中都有一個特定的地址。聲明一個指針變量來指向內(nèi)存中的這些地址,這篇文章主要介紹了C++中指針和內(nèi)存分配,需要的朋友參考下吧
    2021-06-06
  • C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    這篇文章主要介紹了C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù),包括bcopy()函數(shù)和bzero()函數(shù)以及bcmp()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C++實現(xiàn)掃雷程序開發(fā)

    C++實現(xiàn)掃雷程序開發(fā)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)掃雷程序開發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言利用結(jié)構(gòu)體數(shù)組實現(xiàn)學(xué)生成績管理系統(tǒng)

    C語言利用結(jié)構(gòu)體數(shù)組實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言利用結(jié)構(gòu)體數(shù)組實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++庫std::flush的具體使用

    C++庫std::flush的具體使用

    std::flush是C++標準庫中的一個操作符,用于刷新輸出流,本文主要介紹了C++庫std::flush的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論

宜阳县| 延川县| 清水河县| 黔东| 安阳县| 肇庆市| 柯坪县| 江油市| 侯马市| 永登县| 烟台市| 商南县| 虎林市| 女性| 南华县| 光山县| 抚宁县| 云浮市| 嘉黎县| 明星| 宿迁市| 富阳市| 巢湖市| 象州县| 瑞金市| 梧州市| 礼泉县| 寿光市| 邛崃市| 阳朔县| 瓮安县| 兰州市| 上高县| 义乌市| 马尔康县| 聊城市| 满洲里市| 大理市| 无极县| 嘉荫县| 景德镇市|