詳解C++中變量的初始化規(guī)則
前言
定義沒有初始化式的變量時,系統(tǒng)有時候會幫我們初始化變量。
系統(tǒng)如何初始化取決于變量的類型以及變量定義的位置。
內置類型變量是否自動初始化取決于變量定義的位置。
函數體外定義的變量初始成0;函數體內定義的變量不進行自動初始化。除了用作賦值操作的左操作數,其他任何使用未初始化變量的行為都是未定義的,不要依賴未定義行為。
以int類型為例,一段簡單的測試代碼:
#include <iostream>
using namespace std;
int a;
int main()
{
int b;
cout << a << endl;
cout << b << endl;
return 0;
}
在VS執(zhí)行這段代碼,輸出變量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執(zhí)行這段代碼,得到以下結果:
編譯器自動生成的默認構造函數使用與變量初始化相同的規(guī)則來初始化數據成員。對象a在函數體外定義,其int類型數據成員被初始為0;對象b在函數體內定義,合成默認構造函數不會對其進行初始化(符合內置類型變量初始化規(guī)則),其中存放的都是隨機值。同樣,如果數據成員是類類型,則會調用相應的默認構造函數對數據成員進行初始化。
如果稍微改變一下這個類的定義,定義一個構造函數以阻止編譯器自動生成默認構造函數:
#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++中變量的初始化規(guī)則的全部內容,希望這篇文章的內容對大家學習使用C++能有所幫助,如果有疑問可以留言交流,謝謝大家對我們的支持。
上一篇:全面了解#pragma once與 #ifndef的區(qū)別
欄 目:C語言
下一篇:概述C++中的 public protected private friend關鍵字的用法
本文標題:詳解C++中變量的初始化規(guī)則
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2067.html
您可能感興趣的文章
- 04-02func函數+在C語言 func函數在c語言中
- 04-02c語言中對數函數的表達式 c語言中對數怎么表達
- 04-02c語言沒有round函數 round c語言
- 04-02C語言中怎么打出三角函數 c語言中怎么打出三角函數的值
- 01-10求子數組最大和的解決方法詳解
- 01-10深入二叉樹兩個結點的最低共同父結點的詳解
- 01-10數據結構課程設計- 解析最少換車次數的問題詳解
- 01-10數據結構課程設計-用棧實現(xiàn)表達式求值的方法詳解
- 01-10HDOJ 1443 約瑟夫環(huán)的最新應用分析詳解
- 01-10深入理解C++中常見的關鍵字含義


閱讀排行
本欄相關
- 04-02c語言函數調用后清空內存 c語言調用
- 04-02func函數+在C語言 func函數在c語言中
- 04-02c語言的正則匹配函數 c語言正則表達
- 04-02c語言用函數寫分段 用c語言表示分段
- 04-02c語言中對數函數的表達式 c語言中對
- 04-02c語言編寫函數冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數 round c語言
- 04-02c語言分段函數怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數 c語言中怎
- 04-02c語言調用函數求fibo C語言調用函數求
隨機閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法


