摘要:訪問命名空間的內容時,指定命名空間。是的縮寫,意思是標準命名空間。缺省參數缺省參數概念缺省參數是聲明或定義函數時為函數的參數指定一個默認值。缺省參數不能在函數聲明和定義中同時出現。
在C++中,變量、函數和類都是大量存在的,這些變量、函數和類的名稱將都存在于全局作用域中,可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化,以避免命名沖突或名字污染,namespace關鍵字的出現就是針對這種問題的。
int a = 10; int main(void) { int a = 10; return 0; }
這里一個a是全局變量,一個a是局部變量。可以編譯通過。
int a = 10; int a = 20; int main(void) { int a = 10; return 0; }
當有兩個全局變量a時,命名沖突了,編譯不過。
舉例說明,假如1班和2班都有名字叫張三的同學,當一班和二班站在一起時,老師叫張三就會出現歧義,不知道叫的是一班的還是二班的。但是如果老師叫一班的張三或二班的張三,就不會出現歧義和錯誤。這里的一班和二班就相當于命名空間。
定義命名空間,需要使用到namespace關鍵字,后面跟命名空間的名字,然后接一對{}即可,{}中即為命名空間的成員。
namespace bc //bc為命名空間的名字 { //命名空間的成員 int a = 100; int ADD(int a, int b) { return a + b; } }
命名空間中的內容,可以是類、變量、函數、模板和其它命名空間。
命名空間可以嵌套
namespace FPX { int a = 5; namespace doinb { int b = 5; void Champion() { cout << "FPX2021WIN" << endl; } } }
同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。
同時也意味著在名字相同的命名空間中的命名是不能沖突的。
有以下命名空間:
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聲明將命名空間全部展開到全局。
using namespace bc;
這樣命名空間中的內容就可以像全局一樣直接使用。
int a = 10; int b = 20; cout << Add(a, b) << endl; cout << Max(a, b) << endl;
這種方法的優點是使用起來非常方便,缺點是把自己的定義都暴露出去了,導致命名污染。
2.訪問命名空間的內容時,指定命名空間。
int a = 10; int b = 20; cout << bc::Add(a, b) << endl; cout << bc::Max(a, b) << endl;
::為作用域運算符,前綴bc::指出函數Add和Max是定義在名為bc的命名空間中的。通過作用域運算符(::)來指出我們想使用定義在命名空間bc中的名字Add和Max。
這種方法的優點是不存在命名污染,缺點是用起來太麻煩,每個都要去指定命名空間。
3.可以把常用的展開
比如Add函數是常用的:
using bc::Add;
以后使用Add函數時就不需要指定命名空間。
這種方法不會造成大面積的命名污染,把常用的展開,使用時也很方便。
位于頭文件的代碼一般來說不應該使用using聲明。因為頭文件的內容會拷貝到所有引用它的文件中,如果頭文件里有某個using聲明,那么每個使用了該頭文件的文件就都會有這個聲明。對于某些程序來說,由于不經意間包含了一些名字,反而可能產生名字沖突。
C++ 引入了命名空間的概念,計劃重新編寫庫,將類、函數、宏等都統一納入一個命名空間,這個命名空間的名字就是std。std 是 standard 的縮寫,意思是“標準命名空間”。
缺省參數是聲明或定義函數時為函數的參數指定一個默認值。在調用該函數時,如果沒有指定實參則采用該默認值,否則使用指定的實參。
void TestFunc(int a = 0) //參數缺省值 { cout << a << endl; } int main(void) { TestFunc(); //沒有傳參數,使用參數的默認值 TestFunc(10); //傳參數時,使用指定的參數 return 0; }
所有的參數都給出缺省值
void TestFunc(int a = 10, int b = 20, int c = 30) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; }
部分參數給出缺省值
void TestFunc(int a, int b = 10, int c = 20) { cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "c = " << c << endl; }
需要注意的是,
半缺省參數必須從右往左依次來給出,不能間隔著給。
缺省參數不能在函數聲明和定義中同時出現。
缺省值必須是常量或者全局變量。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121669.html
摘要:事實上語言當中有的內容,比如函數循環結構體宏等等內容,也都有,所以大家千萬不要認為語言白學了哈因為之前已經完整更新過語言的博客有需要可以往前翻,所以這里直接介紹相對語言當中新增的內容,而本章引入的內容是的關鍵字命名空間缺省參數函數重載。 ...
摘要:上面這三種均不造成重載,現在來說明原因。結論對于引用返回,返回的對象必須是棧幀銷毀后還存在的。全局,靜態,未銷毀的函數棧幀當中的都是可以的指針與引用如圖兩者底層實現差不多,引用是用指針模擬的。不建議聲明和定義分離,分離會導致鏈接錯誤。 ...
摘要:中包含的即為命名空間的成員。使用輸入輸出更方便,不需增加數據格式控制,比如整形,字符可以連續輸出,表示換行缺省參數備胎,就是給汽車準備一個備用輪胎,一旦那個輪子爆胎或者出了問題,備用輪胎就方便及時地取而代之,汽車就不至于中途拋錨。 ...
摘要:使用輸入輸出更方便,不需增加數據格式控制,比如整形,字符等缺省參數備胎缺省參數是聲明或定義函數時為函數的參數指定一個默認值。此外,函數重載要求參數不同,而跟返回值沒關系。 ...
摘要:使用命名空間的目的是對標識符的名稱進行本地化,以避免命名沖突或名字污染,關鍵字的出現就是針對這種問題的。缺省參數概念缺省參數是聲明或定義函數時為函數的參數指定一個默認值。 ...
閱讀 2770·2021-10-11 11:08
閱讀 1489·2021-09-30 09:48
閱讀 1049·2021-09-22 15:29
閱讀 1037·2019-08-30 15:54
閱讀 976·2019-08-29 15:19
閱讀 526·2019-08-29 13:12
閱讀 3161·2019-08-26 13:53
閱讀 957·2019-08-26 13:28