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

C++命名空間和缺省參數(shù)介紹

 更新時(shí)間:2022年01月26日 10:50:23   作者:sasorit  
這篇文章主要介紹了C++命名空間和缺省參數(shù),使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱(chēng)進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的,缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值,更多詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容

一、命名空間

為什么引入命名空間

在C++中,變量、函數(shù)和類(lèi)都是大量存在的,這些變量、函數(shù)和類(lèi)的名稱(chēng)將都存在于全局作用域中,可能會(huì)導(dǎo)致很多沖突。使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱(chēng)進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的。

?? ?int a = 10;
?? ?
?? ?int main(void)
?? ?{
?? ??? ?int a = 10;
?? ??? ?return 0;
?? ?}

這里一個(gè)a是全局變量,一個(gè)a是局部變量。可以編譯通過(guò)。

	int a = 10;
	int a = 20;
	
	int main(void)
	{
		int a = 10;
		return 0;
	}

當(dāng)有兩個(gè)全局變量a時(shí),命名沖突了,編譯不過(guò)。

舉例說(shuō)明,假如1班和2班都有名字叫張三的同學(xué),當(dāng)一班和二班站在一起時(shí),老師叫張三就會(huì)出現(xiàn)歧義,不知道叫的是一班的還是二班的。但是如果老師叫一班的張三或二班的張三,就不會(huì)出現(xiàn)歧義和錯(cuò)誤。這里的一班和二班就相當(dāng)于命名空間。

命名空間定義

定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對(duì){}即可,{}中即為命名空間的成員。

?? ?namespace bc?? ?//bc為命名空間的名字
?? ?{
?? ??? ?//命名空間的成員
?? ??? ?int a = 100;?? ?
?? ??? ?int ADD(int a, int b)
?? ??? ?{
?? ??? ??? ?return a + b;
?? ??? ?}
?? ?}

命名空間中的內(nèi)容,可以是類(lèi)、變量、函數(shù)、模板和其它命名空間。

命名空間可以嵌套

?? ?namespace FPX
?? ?{
?? ??? ?int a = 5;
?? ??? ?namespace doinb
?? ??? ?{
?? ??? ??? ?int b = 5;
?? ??? ??? ?void Champion()
?? ??? ??? ?{
?? ??? ??? ??? ?cout << "FPX2021WIN" << endl; ? ? ? ??
?? ??? ??? ?}
?? ??? ?}
?? ?}

同一個(gè)工程中允許存在多個(gè)相同名稱(chēng)的命名空間,編譯器最后會(huì)合成同一個(gè)命名空間中。
同時(shí)也意味著在名字相同的命名空間中的命名是不能沖突的。

使用命名空間

有以下命名空間:

  

 ?namespace bc
?? ?{
?? ??? ?int m = 10;
?? ??? ?int n = 20;
?? ?
?? ??? ?int Add(int a, int b)
?? ??? ?{
?? ??? ??? ?return a + b;
?? ??? ?}
?? ?
?? ??? ?int Max(int a, int b)
?? ??? ?{
?? ??? ??? ?return a > b ? a : b;
?? ??? ?}
?? ?}

1.使用using聲明將命名空間全部展開(kāi)到全局。

?? ?using namespace bc;

這樣命名空間中的內(nèi)容就可以像全局一樣直接使用。

?? ?int a = 10;
?? ?int b = 20;
?? ?cout << Add(a, b) << endl;
?? ?cout << Max(a, b) << endl;

這種方法的優(yōu)點(diǎn)是使用起來(lái)非常方便,缺點(diǎn)是把自己的定義都暴露出去了,導(dǎo)致命名污染。

2.訪問(wèn)命名空間的內(nèi)容時(shí),指定命名空間。

?? ?int a = 10;
?? ?int b = 20;
?? ?cout << bc::Add(a, b) << endl;
?? ?cout << bc::Max(a, b) << endl;

::為作用域運(yùn)算符,前綴bc::指出函數(shù)Add和Max是定義在名為bc的命名空間中的。通過(guò)作用域運(yùn)算符(::)來(lái)指出我們想使用定義在命名空間bc中的名字Add和Max。
這種方法的優(yōu)點(diǎn)是不存在命名污染,缺點(diǎn)是用起來(lái)太麻煩,每個(gè)都要去指定命名空間。

3.可以把常用的展開(kāi)

比如Add函數(shù)是常用的:

?? ?using bc::Add;

以后使用Add函數(shù)時(shí)就不需要指定命名空間。
這種方法不會(huì)造成大面積的命名污染,把常用的展開(kāi),使用時(shí)也很方便。
位于頭文件的代碼一般來(lái)說(shuō)不應(yīng)該使用using聲明。因?yàn)轭^文件的內(nèi)容會(huì)拷貝到所有引用它的文件中,如果頭文件里有某個(gè)using聲明,那么每個(gè)使用了該頭文件的文件就都會(huì)有這個(gè)聲明。對(duì)于某些程序來(lái)說(shuō),由于不經(jīng)意間包含了一些名字,反而可能產(chǎn)生名字沖突。

標(biāo)準(zhǔn)命名空間

C++ 引入了命名空間的概念,計(jì)劃重新編寫(xiě)庫(kù),將類(lèi)、函數(shù)、宏等都統(tǒng)一納入一個(gè)命名空間,這個(gè)命名空間的名字就是std。std 是 standard 的縮寫(xiě),意思是“標(biāo)準(zhǔn)命名空間”。

二、缺省參數(shù)

缺省參數(shù)概念

缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。在調(diào)用該函數(shù)時(shí),如果沒(méi)有指定實(shí)參則采用該默認(rèn)值,否則使用指定的實(shí)參。

  

?void TestFunc(int a = 0)?? ?//參數(shù)缺省值
?? ?{
?? ??? ?cout << a << endl;
?? ?}
?? ?
?? ?int main(void)
?? ?{
?? ??? ?TestFunc();?? ??? ?//沒(méi)有傳參數(shù),使用參數(shù)的默認(rèn)值
?? ??? ?TestFunc(10);?? ?//傳參數(shù)時(shí),使用指定的參數(shù)
?? ??? ?return 0;
?? ?}

三、缺省參數(shù)分類(lèi)

全缺省參數(shù)

所有的參數(shù)都給出缺省值:

?? ?void TestFunc(int a = 10, int b = 20, int c = 30)
?? ?{
?? ??? ?cout << "a = " << a << endl;
?? ??? ?cout << "b = " << b << endl;
?? ??? ?cout << "c = " << c << endl;
?? ?}

半缺省參數(shù)

部分參數(shù)給出缺省值:

?? ?void TestFunc(int a, int b = 10, int c = 20)
?? ?{
?? ??? ?cout << "a = " << a << endl;
?? ??? ?cout << "b = " << b << endl;
?? ??? ?cout << "c = " << c << endl;
?? ?}

需要注意的是:

半缺省參數(shù)必須從右往左依次來(lái)給出,不能間隔著給。
缺省參數(shù)不能在函數(shù)聲明和定義中同時(shí)出現(xiàn)。
缺省值必須是常量或者全局變量。

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

相關(guān)文章

  • 使用OpenGL繪制Bezier曲線

    使用OpenGL繪制Bezier曲線

    這篇文章主要為大家詳細(xì)介紹了使用OpenGL繪制Bezier曲線的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 嵌入式QT移植的實(shí)現(xiàn)

    嵌入式QT移植的實(shí)現(xiàn)

    本文主要介紹了嵌入式QT移植的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 從匯編看c++中引用與指針的使用分析

    從匯編看c++中引用與指針的使用分析

    在c++中,引用和指針具有相同的作用,都可以用來(lái)在函數(shù)里面給變函數(shù)外面對(duì)象或者變量的值,下面就來(lái)看他們的原理
    2013-05-05
  • c++11中的noexcept關(guān)鍵字

    c++11中的noexcept關(guān)鍵字

    這篇文章主要介紹了c++11中的noexcept關(guān)鍵字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語(yǔ)言中的while循環(huán)語(yǔ)句示例詳解

    C語(yǔ)言中的while循環(huán)語(yǔ)句示例詳解

    這篇文章主要介紹了C語(yǔ)言中的while循環(huán)語(yǔ)句,主要包括while循環(huán)的基本信息及常見(jiàn)問(wèn)題,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C++計(jì)算任意兩個(gè)日期天數(shù)差的方法詳解

    C++計(jì)算任意兩個(gè)日期天數(shù)差的方法詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)任意兩個(gè)日期天數(shù)差,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-02-02
  • c++ 預(yù)處理之正整型實(shí)現(xiàn)方法

    c++ 預(yù)處理之正整型實(shí)現(xiàn)方法

    這篇文章主要介紹了c++ 預(yù)處理之正整型實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-07-07
  • 深入探究C++ string的內(nèi)部究竟是什么樣的

    深入探究C++ string的內(nèi)部究竟是什么樣的

    這篇文章主要給大家介紹了關(guān)于C++ string的內(nèi)部究竟是什么樣的,文中通過(guò)示例代碼的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 深入全排列算法及其實(shí)現(xiàn)方法

    深入全排列算法及其實(shí)現(xiàn)方法

    本篇文章是對(duì)全排列算法及其實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • OLEDB打開(kāi)Excel文件的實(shí)現(xiàn)方法

    OLEDB打開(kāi)Excel文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇OLEDB打開(kāi)Excel文件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01

最新評(píng)論