詳解C++中變量的初始化規矩。本站提示廣大學習愛好者:(詳解C++中變量的初始化規矩)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++中變量的初始化規矩正文
媒介
界說沒有初始化式的變量時,體系有時刻會幫我們初始化變量。
體系若何初始化取決於變量的類型和變量界說的地位。
內置類型變量能否主動初始化取決於變量界說的地位。
函數體外界說的變量初始成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++能有所贊助,假如有疑問可以留言交換,感謝年夜家對的支撐。