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

C++命名空間實例解析

 更新時間:2014年08月15日 09:42:05   投稿:shichen2014  
這篇文章主要介紹了C++命名空間實例解析,對C++程序員來說是非常重要的知識點,需要的朋友可以參考下

命名空間是C++非常重要的概念,本文就以實例形式對其進行深入分析,具體內(nèi)容如下:

通常來說,在C++中,命名空間(namespace)的目的是為了防止名字沖突。每個命名空間是一個作用域,在所有命名空間之外,還存在一個全局命名空間(global namespace),全局命名空間以隱式的方式聲明,它并沒有名字。在命名空間機制中,原來的全局變量,就是位于全局命名空間中(可以用::member的形式表示)。

一、定義命名空間

1、每個命名空間都是一個作用域

和其他作用域類似,在命名空間中的每個名字必須表示唯一實體,而在不同命名空間中,可以有相同名字的成員

2、命名空間可以是不連續(xù)的

命名空間可以定義在幾個不同的部分:

namespace nsp { 
  /* …… */ 
}  // 命名空間作用域后面無須分號

如果之前沒有名為nsp的命名空間定義,則上述代碼創(chuàng)建一個新的命名空間;否則,上述代碼打開已經(jīng)存在的命名空間添加一些新的成員。

3、命名空間是可以嵌套的

嵌套的命名空間是指定義在其他命名空間中的命名空間。嵌套的命名空間是一個嵌套的作用域,內(nèi)層命名空間聲明的名字將隱藏外層命名空間聲明的同名成員:

int x = 20; 
namespace outer { 
  int x = 10; 
  namespace inner { 
    int z = x; 
  } 
} 
 
int main() 
{ 
  std::cout << outer::inner::z; // 輸出10 
  return 0; 
} 

注意,通常我們不把#include頭文件放在命名空間內(nèi)部。

4、未命名的命名空間

未命名的命名空間(unnamed namespace)是指關鍵字namespace后緊跟花括號括起來的一系列聲明語句。未命名的命名空間中定義的變量擁有靜態(tài)生命周期:它們在第一次使用前創(chuàng)建,并且直到程序結(jié)束才銷毀。在標準C++引入命名空間的概念之前,程序需要將名字聲明成static以使其對于整個文件有效,但是,現(xiàn)在在文件中進行靜態(tài)聲明的做法已經(jīng)被C++標準取消了,取而代之的是使用未命名的命名空間。

一個未命名的命名空間可以在某個給定的文件內(nèi)不連續(xù),但是不能跨越多個文件。也就是說,未命名的命名空間僅在特定的文件內(nèi)部有效,其作用范圍不會橫跨多個不同的文件。另外,由于未命名的命名空間它沒有名字,所以其中定義的名字的作用域與該命名空間所在的作用域相同:

int i;  // i的全局聲明 
namespace { 
  int i; 
} 
i = 10; // 錯誤,二義性 

namespace local { 
  namespace { 
    int i; 
  } 
} 
local::i = 42; // 正確 

二、使用命名空間

對命名空間中成員的引用,需要使用命名空間的作用域運算符(::)。但是,像namespace_name::member_name這樣使用命名空間的成員非常煩瑣,我們需要使用一些其他的更簡便的方法。

1、命名空間的別名

有些命名空間的名字很長或者命名空間嵌套了很多層,我們可以為其設定一個較短的同義詞,也就是別名:

namespace cln = cpluslus_learning_namespace; 
namespace Qlib = outer::inner::QueryLib; 

2、using聲明

一條using聲明(using declaration)語句一次只引入命名空間的一個成員:

using 命名空間名::[命名空間名::……]成員名;  // 例如 using OLib::List; 

3、using指示

using指示(using directive)和using聲明不同的地方是,我們無法控制哪些名字是可見的,因為using指示會使得某個特定的命名空間中所有的名字都可見:

using namespace std;  // 引入命名空間std 

使用命名空間主要是為了防止名字沖突,如果隨意使用using指示注入命名空間的所有名字,將重新引入名字沖突的問題。另外,using聲明和using指示在作用域上有區(qū)別using聲明是將一個成員引入當前命名空間作用域內(nèi);using指示是將所有成員引入當前和上一層命名空間作用域內(nèi)

namespace nsp {  // 命名空間 
  int i=16, j=15; 
} 
 
int j = 0;  // 全局變量 
 
int main() 
{ 
  using namespace nsp;  // 如果使用j,將在::j和nsp::j之間產(chǎn)生沖突 
  std::cout << j; 
  return 0; 
}

如果將using namespace nsp;改成using聲明using nsp::j;則會正確輸出15。

相關文章

  • C++實現(xiàn)LeetCode(171.求Excel表列序號)

    C++實現(xiàn)LeetCode(171.求Excel表列序號)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(171.求Excel表列序號),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C/C++中提高查找速度的小技巧

    C/C++中提高查找速度的小技巧

    這篇文章主要給大家介紹了C/C++中提高數(shù)組中查找某個元素或者字符串中查找某個字符效率的小技巧,提高速度對我們?nèi)粘i_發(fā)來說還是很有用的,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • java實現(xiàn)任意四則運算表達式求值算法

    java實現(xiàn)任意四則運算表達式求值算法

    這篇文章主要介紹了java實現(xiàn)任意四則運算表達式求值算法,實例分析了基于java實現(xiàn)表達式四則運算求值的原理與技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C++訪問注冊表獲取已安裝軟件信息列表示例代碼

    C++訪問注冊表獲取已安裝軟件信息列表示例代碼

    這篇文章主要介紹了c++通過讀取注冊表獲得本機已安裝軟件信息的方法,大家參考使用吧
    2013-11-11
  • 詳解C++編程中斷言static_assert的使用

    詳解C++編程中斷言static_assert的使用

    這篇文章主要介紹了C++編程中斷言static_assert的使用,斷言在debug時非常有用,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01
  • C語言簡明分析選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用

    C語言簡明分析選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的使用

    C語言條件控制語句選擇結(jié)構(gòu),是屬于計算機的語言編輯,有在C語言條件控制中的語句選擇結(jié)構(gòu)的存在,即是C語言條件控制語句選擇結(jié)構(gòu),循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結(jié)構(gòu)
    2022-04-04
  • C++里最容易忽視卻不能忽視的問題(必看)

    C++里最容易忽視卻不能忽視的問題(必看)

    在C++里最容易忽視卻不能忽視的問題都有哪些呢?下面小編就為大家介紹一下。一起跟隨小編過來看看吧
    2016-05-05
  • C語言指針超詳細講解上篇

    C語言指針超詳細講解上篇

    指針提供了對地址操作的一種方法,因此,使用指針可使得?C?語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是?C?語言的精髓
    2022-04-04
  • Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    Opencv 馬賽克和毛玻璃效果與圖片融合的實現(xiàn)

    這篇文章主要為大家詳細介紹了通過OpenCV實現(xiàn)馬賽克和毛玻璃濾鏡效果與圖片的融合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C/C++實現(xiàn)全排列算法的示例代碼

    C/C++實現(xiàn)全排列算法的示例代碼

    本文主要介紹了C/C++實現(xiàn)全排列算法的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06

最新評論