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

C++ namespace命名空間解析

 更新時間:2021年11月25日 10:01:08   作者:zhaozhenyu123  
考慮一種情況,當我們有兩個同名的人,Zara,在同一個班里。當我們需要對它們進行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會遇到同樣的情況,所以命名空間就此產生

命名空間 namespace

#include<iostream>

int rand = 0;

int main()
{
	printf("%d", rand);
	
	return 0;
}

上述代碼一定會出現以下情況:

原因: 自己定義的rand變量為某一庫函數里面已經聲明過的函數,意思就是你自己定義的東西跟庫函數的東西重復了。這種錯誤就是命名沖突。

命名沖突問題:

  • 我們自己定義的變量、函數可能跟庫里面重名沖突。
  • 進入公司項目組后,做的項目通常比較大,多人協作,可能命名沖突。

C語言沒有辦法很好的解決這個問題。

C++提出了一個新語法:命名空間

命名空間的定義

對于上面的問題我們使用命名空間來解決:

#include<iostream>

namespace zzy
{
	int rand = 0;
}

int main()
{
	printf("%d", zzy::rand);
	
	return 0;
}

我們使用namespace來劃定一個區(qū)域,叫做域,域的名字叫zzy(名字可以自己定義,但是最好不要跟庫已有的重復)。這個域就像是隱身衣一樣,讓系統編譯的時候不會去這個區(qū)域里面讀取。

:: 為域作用限定符,前面是命名空間的名稱,后面是命名空間里的變量、類型、函數等。使用這個限定符來指定我們使用的是哪個命名空間里的變量

需要注意的一點是,命名空間是全局的,必須要寫在main函數的外邊。

下面舉些例子來幫大家更清晰的了解命名空間:

1. 函數定義在命名空間里

#include<iostream>
namespace zzy
{
	int Add(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	printf("%d\n", zzy::Add(1, 2));
	return 0;
}

如果把函數的定義寫在命名空間的外面,而函數聲明在命名空間里面會怎么樣?由于命名空間會屏蔽掉,相當于你沒有寫這個聲明。但是如果你的函數定義寫在main函數的上面就沒什么問題了。

#include<iostream>
namespace zzy
{

	int Add(int x, int y);
}

int Add(int x,int y)
{
	return x+y;
}

int main()
{
	printf("%d\n",/*zzy::*/Add(1, 2));
	return 0;
}

一點要注意,這個時候你不可以寫zzy::了,因為如果你這么寫的話系統會優(yōu)先去zzy命名空間里去尋找,發(fā)現只有函數的聲明,沒有函數的定義,所以是沒結果的。

2.對全局變量使用命名空間

#include <iostream>
int a = 0;

int main()
{
	int a = 10;
	printf("%d",::a);//使用全局作用域的a,::前面的沒有東西代表全局作用域
}

3.命名空間的嵌套

#include <iostream>
namespace zzy
{
	int a = 10;
	namespace N1
	{
		int b = 20;
	}
}

int main()
{
	printf("%d\n",zzy::a);
	printf("%d\n",zzy::N1::b);
}

4.using命名空間

我們發(fā)現,每次使用一些命名空間里的變量總是要加上”命名空間名稱::”,當變量多時,就會顯得很繁瑣。所以我們可以這么做:

#include <iostream>
using namespace zzy
{
	int count = 12;
	int Add(int x,int y)
	{
		return x+y;
	}
}

//解放了整個zzy空間,使里面的變量等變得不隱身了
using namespace zzy;

int main()
{
	printf("%d",count);
	printf("%d",Add(1,2));
}

也可以解放一部分變量、函數等:

#include <iostream>
using namespace zzy
{
	int count = 12;
	void B()
	{
		int cur = 0;
	}
}

//只解放了一部分變量
using zzy::B::cur;

int main()
{
	printf("%d",zzy::count);
	printf("%d",cur);
}

5.命名空間里的結構體

#include <iostream>

using namespace zzy
{
	int count = 0;
	struct Node
	{
		int val = 0;
	};
}

int main()
{
	struct zzy::Node node;//注意::的位置,我們要找的是Node
	node.val = 12;
	printf("%d\n", node.val);
}

到此這篇關于C++ namespace命名空間解析的文章就介紹到這了,更多相關C++ 命名空間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++?std::chrono庫使用示例(實現C++?獲取日期,時間戳,計時等功能)

    C++?std::chrono庫使用示例(實現C++?獲取日期,時間戳,計時等功能)

    std::chrono是C++標準庫中的一個組件,用于表示和處理時間,這篇文章主要介紹了C++?std::chrono庫使用指南(實現C++?獲取日期,時間戳,計時等功能),需要的朋友可以參考下
    2023-06-06
  • 詳解在VScode中添加代碼塊(含C++指令生成代碼)

    詳解在VScode中添加代碼塊(含C++指令生成代碼)

    這篇文章主要介紹了詳解在VScode中添加代碼塊(含C++指令生成代碼),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 使用C++實現簡單的文章生成器

    使用C++實現簡單的文章生成器

    這篇文章主要為大家詳細介紹了鵝湖使用C++實現簡單的狗屁不通文章生成器,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下
    2024-03-03
  • C++機房預約系統實現流程實例

    C++機房預約系統實現流程實例

    這篇文章主要介紹了C++機房預約系統實現流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • C++ Boost PropertyTree示例超詳細講解

    C++ Boost PropertyTree示例超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • 詳解C語言中strcpy()函數與strncpy()函數的使用

    詳解C語言中strcpy()函數與strncpy()函數的使用

    這篇文章主要介紹了詳解C語言中strcpy()函數與strncpy()函數的使用,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C語言實現通訊錄系統課程設計

    C語言實現通訊錄系統課程設計

    這篇文章主要為大家詳細介紹了C語言實現通訊錄系統課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型)

    C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型)

    這篇文章主要介紹了C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言實現手寫Map(全功能)的示例代碼

    C語言實現手寫Map(全功能)的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現手寫Map(全功能),文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-08-08
  • 從頭學習C語言之for語句和循環(huán)嵌套

    從頭學習C語言之for語句和循環(huán)嵌套

    這篇文章主要為大家詳細介紹了C語言之for語句和循環(huán)嵌套,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論