国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

詳解C++中變量的初始化規則

2020-01-26 14:26:55
字體:
來源:轉載
供稿:網友

前言

定義沒有初始化式的變量時,系統有時候會幫我們初始化變量。

系統如何初始化取決于變量的類型以及變量定義的位置。 

內置類型變量是否自動初始化取決于變量定義的位置。

函數體外定義的變量初始成0;函數體內定義的變量不進行自動初始化。除了用作賦值操作的左操作數,其他任何使用未初始化變量的行為都是未定義的,不要依賴未定義行為。

以int類型為例,一段簡單的測試代碼:

#include <iostream>using namespace std;int a;int main(){ int b; cout << a << endl; cout << b << endl; return 0;}

在VS執行這段代碼,輸出變量a的值0,同時VS會報錯:Run-Time Check Failure #3 ― The variable 'b' is being used without being initialized變量a被自動初始化為0;變量b未被自動初始化。

類類型變量在定義時,如果沒有提供初始化式,則會自動調用默認構造函數進行初始化(不論變量在哪里定義)。如果某類型沒有默認構造函數,則定義該類型對象時必須提供顯示初始化式。

一段簡單的測試代碼(默認構造函數由編譯器自動生成):

#include <iostream>using namespace std;class testA{ public: void printf() const {  cout << data << endl; } private: int data;};testA a;int main(){ testA b;  a.printf(); b.printf(); return 0;}

在VS執行這段代碼,得到以下結果:

編譯器自動生成的默認構造函數使用與變量初始化相同的規則來初始化數據成員。對象a在函數體外定義,其int類型數據成員被初始為0;對象b在函數體內定義,合成默認構造函數不會對其進行初始化(符合內置類型變量初始化規則),其中存放的都是隨機值。同樣,如果數據成員是類類型,則會調用相應的默認構造函數對數據成員進行初始化。

如果稍微改變一下這個類的定義,定義一個構造函數以阻止編譯器自動生成默認構造函數:

#include <iostream>using namespace std;class testA{ public: testA(int a) {  data = a; } void printf() const {  cout << data << endl; } private: int data;};testA a;int main(){ testA b;  a.printf(); b.printf(); return 0;}

這段代碼無法通過編譯:error C2512: “testA”: 沒有合適的默認構造函數可用。

總結

以上就是關于C++中變量的初始化規則的全部內容,希望這篇文章的內容對大家學習使用C++能有所幫助,如果有疑問可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥宁县| 佳木斯市| 台山市| 通道| 栖霞市| 云安县| 佛学| 乐清市| 于田县| 大洼县| 南靖县| 衡水市| 菏泽市| 保靖县| 张家界市| 玉树县| 南汇区| 武夷山市| 平潭县| 集安市| 巴青县| 嘉鱼县| 浦城县| 游戏| 舞钢市| 台江县| 德惠市| 崇义县| 乌苏市| 阿城市| 秭归县| 巫溪县| 玉溪市| 壤塘县| 旺苍县| 高清| 东丰县| 双鸭山市| 博兴县| 田东县| 石景山区|