一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 詳情介紹C++之命名空間

詳情介紹C++之命名空間

2021-12-29 14:06非常規自我實現 C/C++

這篇文章主要詳情介紹了C++命名空間,命名空間的出現就是為了解決名稱沖突問題,對此感興趣的朋友可以參考下面文章

C++命名空間

1.概述

在c++中,名稱(name)可以是符號常量、變量、函數、結構、枚舉、類和對象等等。工程越大,名稱互相沖突性的可能性越大。另外使用多個廠商的類庫時,也可能導致名稱沖突。為了避免,在大規模程序的設計中,以及在程序員使用各種各樣的C++庫時,這些標識符的命名發生沖突,標準C++引入關鍵字namespace(命名空間/名字空間/名稱空間),可以更好地控制標識符的作用域。

因此:命名空間的出現就是為了解決名稱沖突問題

2.格式

?
1
2
3
4
5
6
7
namespace 空間名稱
{
    變量名稱
    .....
    函數聲明
    .....
}

3.定義范圍

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
namespace test#這是正確的命名形式
{
    ..... 
}
 
int main()
{
namespace test01 #這是錯誤的命名形式
{
    
}
    ....
}

結論:命名空間只能在全局范圍內定義

4.瀑布式開發格式

命名空間名稱相同就是同一個命名空間

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
namespace test
{
 ....   
}
namespace test #名稱相同就是同一個命名空間
{
    .......
}
 
int main()
{
    ........
}

5.命名空間的訪問方式

5.1空間名::變量名

?
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
namespace test
{
    int a = 10;
}
int main()
{
    cout << test::a<<endl;
    
    .....
}   

5.2using namespace 空間名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
namespace test
{
    int a = 10;
}
using namespace test;#需要在命名空間定義之后
int main()
{
    cout <<a<<endl;
    
    .....
}   

需要注意的是:

在使用該語法時,需要在命名空間定義之后,否則會提示找不到。

6.命名空間可以無限嵌套

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
namespace test01
{
    namespace test02
    {
        namespace test
        {
            int a = 10;
        }
    }
 
}
 
using namespace test01::test02::test;#如果采用第二種方式的話就需要這樣聲明
int main()
{
    cout << a << endl;
 
}

7.權限

命名空間不存在私有的概念,都是共有的。

這個也很好理解,因為命名空間的出現就是為了解決名稱沖突的問題。僅僅只是解決這個問題而已。

8.匿名命名空間

原則上禁止使用匿名命名空間,出現匿名命名空間這總機制就是為了解決名稱沖突

在了解上面的基礎之上,我們再來講述下面的語法規則

匿名命名空間中定義的變量等同于全局變量,但是再背顯式調用的時候,使用原生全局變量

相信大家看到這句話會覺得很絕望,但是呢,編程就是這樣,直接看代碼就對了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int a = 10;
namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << a <<endl;
    .....
}

大家猜一下,上面的結果是什么?是10 還是 20

結果是編譯不通過!!!提示是:變量a是不明確的符號

正如上面所說,匿名空間中定義的變量等同于全局變量,那不就相當于定義了兩個相同名稱的全局變量。那不就重定義了嗎

Attention:C++中不存在變量的定義和聲明

如果要想引用全局變量,那就是如下所示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int a = 10;
namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << ::a <<endl;
    .....
}

大家猜一下,上面的結果是什么?是10還是20

結果是10!!!

正如上面所說,如果變量a被調用,則被調用的是原生全局變量,那就是10。

我們說了,匿名命名空間中定義的變量就相當于全局變量,意味著如果沒有定義原生全局變量,那么就可以像調用原生全局變量一樣調用匿名空間中的全局變量。

?
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << a <<endl;  #調用原生全局變量的方式
    .....
}

9.別名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int a = 10;
namespace test
{
  int a = 20;
}
namespace alise_test = test;#這就是給命名空間
 
int main()
{
    cout << ::a <<endl;
    .....
}

原則上是不推薦給標準命名空間起別名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int a = 10;
namespace test
{
  int a = 20;
}
namespace alise_std = std;#這是不建議的一種做法
 
int main()
{
    cout << ::a <<endl;
    .....
}

10.編程模型

使用命名空間的時候,最好還是遵循某種格式。不遵循這種方式也是可以的,對于我而言,準許某種框架的目的在于簡便自己編碼。

?
1
2
3
4
5
6
7
8
9
namespace test
{
    int a = 0;#變量名的定義
    int add(int a , int b );
}
int test::add(int a , int b )
{
    return a+b;
}

PS:命名空間中存放的是變量初始化、函數的聲明、類的聲明等等,而函數的定義

11.using語法使用

using namespace 空間名;

這個語句可以在程序中的任何一個地方使用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
namespace test
{
  int a = 20;
}
using namespace test; #test命名空間中的符號的作用域在該語句之后,該源文件之前
void hello(void)
{
    using namespace test;#test命名空間中的符號的作用域在該語句之后,函數體之前
    
}
int main()
{
    cout << a <<endl;
    .....
}

Attention:如果沒有引用,命名空間里的代碼塊就不會被編譯

如果命名空間中有大量的符號,采用上面一種方法就不太妥當,因為實際使用到的符號也就那么幾個。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
namespace test
{
  int a = 20;
}
using namespace test::a; #只使用test命名空間中的a變量
int main()
{
    cout << a <<endl;
    .....
}

到此這篇關于詳情介紹C++之命名空間的文章就介紹到這了,更多相關C++命名空間內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_46359697/article/details/120071452

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
主站蜘蛛池模板: 99r在线观看| 成人快手破解版 | 婷婷在线网站 | 美女靠逼的视频 | 99视频在线观看视频一区 | 肉车各种play文r | 99性视频| 肉搏潘金莲三级18春 | 操美女b | 免费一级特黄特色大片在线观看 | 国产亚洲精品一区二区在线观看 | 成人嗯啊视频在线观看 | 99精品国产成人一区二区 | 99热久久这里只有精品23 | 校园全黄h全肉细节文 | 久久精品热在线观看30 | 99在线精品日韩一区免费国产 | 91大神在线精品视频一区 | 亚洲第一成年免费网站 | 国产欧美一区二区精品久久久 | 欧美在线观看网址 | 完整秽淫刺激长篇小说 | 99ri国产在线 | 99精品国产高清一区二区三区香蕉 | 好姑娘完整版在线观看中文 | 国产v日韩v欧美v精品专区 | 亚洲欧美综合区自拍另类 | 色中色官网 | 石原莉奈被店长侵犯免费 | 护士柔佳| 日本大尺度动漫在线观看缘之空 | 精品福利视频一区二区三区 | 四虎免费影院在线播放 | 91精品国产美女福到在线不卡 | 邪恶肉肉全彩色无遮琉璃神社 | 久久水蜜桃亚洲AV无码精品偷窥 | 四虎精品成人a在线观看 | 亚洲精品成人456在线播放 | 女人爽到喷水的视频免费看 | 亚洲高清国产拍精品影院 | 国产区香蕉精品系列在线观看不卡 |