日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C++命名空間using?namespace?std是什么意思_C 語(yǔ)言

作者:罅隙` ? 更新時(shí)間: 2023-02-25 編程語(yǔ)言

一、 前言

C++中的using namespace std是什么意思呢?為了理解其中的含義,我們首先需要學(xué)習(xí)一個(gè)概念叫做命名空間

我們都知道,C語(yǔ)言規(guī)定變量名不能與關(guān)鍵字沖突,但是并沒(méi)有規(guī)定變量名不能與庫(kù)中的變量名沖突,但這在實(shí)際的操作的過(guò)程中就會(huì)產(chǎn)生意想不到的錯(cuò)誤:

例如,將一個(gè)time變量放在main函數(shù)中,根據(jù)局部?jī)?yōu)先的原則,time變量就會(huì)被理解為一個(gè)局部變量。但當(dāng)time作為一個(gè)全局變量出現(xiàn)的時(shí)候,由于time庫(kù)中也含有一個(gè)名叫time的函數(shù)名,頭文件被展開(kāi)后,此time被理解為變量名還是函數(shù)名就會(huì)產(chǎn)生歧義。

而C++中出現(xiàn)的命名空間概念就是為了填C語(yǔ)言中的這個(gè)坑。

?總結(jié):同一個(gè)域中不能出現(xiàn)兩個(gè)重名的變量名/函數(shù)名,而命名空間的提出就是為了對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以此解決命名污染的問(wèn)題,其作用就是定義一個(gè)新的作用域

二、作用域分解運(yùn)算符

在講命名空間的時(shí)候首先給大家介紹一個(gè)作用域分解運(yùn)算符 " :: "

?使用說(shuō)明
? A,B表示兩個(gè)類,而在A,B中都有成員member

  • A :: member表示類A成員中的member
  • B :: member表示類B成員中的member

當(dāng)前面的類不指定的時(shí)候,默認(rèn)為全局

前面說(shuō)到變量名沖突的時(shí)候遵循局部?jī)?yōu)先原則,那么我們能不能就想訪問(wèn)到全局變量呢?我們就可以通過(guò)作用域分解運(yùn)算符實(shí)現(xiàn):

三、命名空間使用介紹

namespace my_variant
{
	int time = 10;
}

int main()
{
	printf("%d", my_variant::time);
}

?基本介紹①

  • namespace是一個(gè)C++中的一個(gè)關(guān)鍵字
  • 我們將變量定義在自己創(chuàng)建的my_variant命名空間,以避免被污染
  • 訪問(wèn)命名空間中的變量,需要使用作用域分解運(yùn)算符
  • 命名空間只能定義在全局,其中定義的變量為全局變量
namespace my_variant
{
	int time = 10;

	typedef struct Stu
	{
		char name[10];
		int age;
		int score;
	}Stu;
	
	namespace _variant
	{
		int Add(int a, int b)	
		{
			return a + b;
		}
	}
	
}

int main()
{
	my_variant::Stu data = {0};
	int ret = my_variant::_variant::Add(1, 2);
}

?基本介紹②

  • 從上面我們可以看到命名空間中過(guò)的內(nèi)容不只局限于變量名,也可以是函數(shù)名,類型名
  • 命名空間可以無(wú)限次嵌套命名空間,同樣的使用里面的內(nèi)容的時(shí)候也需要多次使用作用域分解運(yùn)算符——一層一層對(duì)應(yīng)的關(guān)系。使用嵌套命名空間可以解決命名空間內(nèi)部的命名沖突
  • 一個(gè)工程中同名的命名空間最終會(huì)被合并為一個(gè)命名空間

當(dāng)然我們可以看到,每次要使用命名空間中的變量都需要寫很多額外的內(nèi)容,有沒(méi)有什么辦法可以簡(jiǎn)化操作呢——我們想要訪問(wèn)命名空間中的space_b有兩種方法:

namespace space_a
{
	int a1 = 1;
	int a2 = 2;
	namespace space_b
	{
		int b1 = 10;
		int b2 = 20;
		int b3 = 30;
	}
	namespace space_c
	{
		int c1 = 5;
		int c2 = 6;
	}
}
using namespace space_a;
using namespace space_b;

方法①:首先將space_a中的內(nèi)容全部釋放出來(lái),再釋放其中的space_b的內(nèi)容(注意順序不能顛倒,否則space_b認(rèn)不出來(lái))

using namespace space_a:: space_b;

方法②用什么放什么。只是將space_b中全部的內(nèi)容釋放出來(lái),而不會(huì)對(duì)其他的內(nèi)容產(chǎn)生影響。

釋放出來(lái)之后我們便可以愉快自由的使用了:

四、using namespace std

經(jīng)過(guò)上面的學(xué)習(xí),我們不難理解using name std的作用是釋放std命名空間中的變量名,函數(shù)名以及類型名,其中std是C++標(biāo)準(zhǔn)庫(kù)的命名空間。

我們?cè)跁鴮懘a的時(shí)候?yàn)榱朔奖阌谑菍++標(biāo)準(zhǔn)庫(kù)中的命名空間完全展開(kāi)了,但是最好的做法我想還是用什么放什么。

另外,標(biāo)準(zhǔn)C++庫(kù)中提供兩種頭文件,前面以C開(kāi)頭的頭文件是支持命名空間的,而后者是不支持的。

總結(jié)?

原文鏈接:https://blog.csdn.net/whc18858/article/details/124588910

欄目分類
最近更新