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

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

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

服務器之家 - 編程語言 - C/C++ - C++靜態持續變量介紹

C++靜態持續變量介紹

2022-03-07 14:00梁唐 C/C++

這篇文章主要介紹了 C++靜態持續變量,靜態持續變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內部連接性和無鏈接性。其中外部鏈接性指的是可以在其他文件中訪問,內部鏈接性指的是只能在當前文件訪問

1、auto關鍵字

我們現在知道,使用auto關鍵字可以自動推導變量類型,尤其是在一些很復雜的情況下,使用auto可以大大簡化代碼。但是在早期的C++和C語言當中,auto關鍵字被用來顯式地表示某個變量為自動存儲。

?
1
auto float dis;

這個功能幾乎不被使用,所以在C++11當中進行了更新,賦予了它新的含義。

2、靜態持續變量

除了自動存儲變量之后,C++當中還有靜態持續變量。關于靜態持續變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內部連接性和無鏈接性。其中外部鏈接性指的是可以在其他文件中訪問,內部鏈接性指的是只能在當前文件訪問,無鏈接性指的是只能在當前函數或代碼塊中訪問。

這三種鏈接性雖然范圍不同,但都在整個程序運行期間存在,因此它們的壽命更長,由于在程序運行期間,靜態持續變量的數目保持不變,因此不需要使用棧來管理它們。編譯器將會分配固定的內存塊來存儲所有的靜態變量,這些變量在整個程序運行期間一直存在。

并且所有沒有顯式初始化的靜態變量,編譯器都會將它置為0。在默認情況下,靜態數組和結構將所有元素和成員的所有位都置為0。

下面介紹一下這三種靜態持續變量的創建方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int cnt = 1000;
 
static int one_file = 50;
 
void func1(int n) {
 
    static int ret = 0;
 
}
 
 
 
int main() {
 
 // some statements
 
}

在上面這段代碼當中,我們定義了三個靜態持續變量:cnt,one_file,ret。其中cnt為外部鏈接性,它可以在任何地方使用。one_file為內部鏈接性,可以在當前文件中任意地方使用。而ret沒有鏈接性,只能在函數func1中使用。

但是這里有一點要注意,雖然ret只能在函數func1中使用,但這并不意味著函數func1執行之前ret不存在。前面說了靜態持續變量擁有單獨的內存塊來存儲,并不受函數生命周期的影響。

我們來看一個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void test() {
 
 static int ret = 0;
 
 ret++;
 
 cout << ret << endl;
 
}
 
 
 
int main() {
 
    test();
 
 test();
 
 return 0;
 
}

請問當我們運行上述代碼,屏幕當中會得到什么結果?

答案是1和2,因為ret變量是一個靜態持續類型,雖然我們只能在函數test內部使用它,但它不受函數test生命周期的影響。也就是說static int ret = 0;這句初始化語句只會在test函數第一次執行時執行一次,之后即使函數退出,這個值依然存在。當我們第二次執行的時候,由于ret變量已經存在,所以并不會將它再置為0。

對于這里用到的關鍵字static,簡單理解成靜態是不妥的。其實它有兩層含義,當我們是在一個函數內部局部聲明的時候,它表示的是這個變量是一個無鏈接性的靜態變量,表示的是存儲的持續性。當用于代碼塊外部聲明時,static表示的是內部鏈接性,如果不加static則表示外部鏈接性。所以這其中的作用是有一點區別的,也有人將它稱為關鍵字重載,即關鍵字的具體含義取決于上下文。

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

原文鏈接:https://developer.51cto.com/art/202111/692681.htm

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

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

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

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

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

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

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

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

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

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

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

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

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

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

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

    C語言教程網7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

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

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

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

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

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

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

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

    xiaocaidayong8482021-08-20
主站蜘蛛池模板: 亚洲高清一区二区三区四区 | 久久黄视频 | 欧美日韩国产一区二区三区欧 | 国产成人综合久久精品红 | 91精品手机国产露脸 | 欧美猛男同志video在线 | 97久久天天综合色天天综合色hd | 日韩在线观看网站 | 插鸡小说| 国产日本久久久久久久久婷婷 | 国产高清免费午夜在线视频 | 欧美综合色网 | 成人性爱视频在线观看 | chinesespank调教 | 成人蜜桃网 | 亚洲欧美一区二区三区不卡 | 视频一区在线免费观看 | 波多野结衣教师未删减版 | 国产亚洲欧美日韩综合综合二区 | www.日本视频| 黑人同学征服教师麻麻 | 国产靠逼视频 | 欧美精品色精品一区二区三区 | 免费精品视频在线 | 大香线一本 | 亚洲 欧美 清纯 校园 另类 | 国产一区视频在线免费观看 | 国产精品边做边接电话在线观看 | 禁忌4中文 | 99日影院在线播放 | 高清在线一区二区 | 亚洲欧美久久久久久久久久爽网站 | 日本三级s级在线播放 | 99久久九九 | 国精品午夜dy8888狼人 | 免费99精品国产自在现线 | 毛片啪啪视频 | 成人丁香婷婷 | 亚洲精品福利一区二区在线观看 | 双性肉文h | www.色姐姐 |