欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++中變量的初始化規(guī)則

 更新時(shí)間:2016年08月25日 11:15:18   投稿:daisy  
這篇文章詳細(xì)介紹了關(guān)于C++中變量的初始化規(guī)則,C++如果不對變量初始化,可能會導(dǎo)致很多后果,所以學(xué)習(xí)C++變量初始化規(guī)則就很重要了,下面一起來看看

前言

定義沒有初始化式的變量時(shí),系統(tǒng)有時(shí)候會幫我們初始化變量。

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

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

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

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

#include <iostream>
using namespace std;

int a;

int main()
{
 int b;

 cout << a << endl;
 cout << b << endl;

 return 0;
}

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

類類型變量在定義時(shí),如果沒有提供初始化式,則會自動調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化(不論變量在哪里定義)。如果某類型沒有默認(rèn)構(gòu)造函數(shù),則定義該類型對象時(shí)必須提供顯示初始化式。

一段簡單的測試代碼(默認(rèn)構(gòu)造函數(shù)由編譯器自動生成):

#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í)行這段代碼,得到以下結(jié)果:

編譯器自動生成的默認(rèn)構(gòu)造函數(shù)使用與變量初始化相同的規(guī)則來初始化數(shù)據(jù)成員。對象a在函數(shù)體外定義,其int類型數(shù)據(jù)成員被初始為0;對象b在函數(shù)體內(nèi)定義,合成默認(rèn)構(gòu)造函數(shù)不會對其進(jìn)行初始化(符合內(nèi)置類型變量初始化規(guī)則),其中存放的都是隨機(jī)值。同樣,如果數(shù)據(jù)成員是類類型,則會調(diào)用相應(yīng)的默認(rèn)構(gòu)造函數(shù)對數(shù)據(jù)成員進(jìn)行初始化。

如果稍微改變一下這個(gè)類的定義,定義一個(gè)構(gòu)造函數(shù)以阻止編譯器自動生成默認(rèn)構(gòu)造函數(shù):

#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”: 沒有合適的默認(rèn)構(gòu)造函數(shù)可用。

總結(jié)

以上就是關(guān)于C++中變量的初始化規(guī)則的全部內(nèi)容,希望這篇文章的內(nèi)容對大家學(xué)習(xí)使用C++能有所幫助,如果有疑問可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 嵌入式C語言二級指針在鏈表中的應(yīng)用

    嵌入式C語言二級指針在鏈表中的應(yīng)用

    這篇文章主要為大家介紹了嵌入式C語言二級指針在鏈表中的應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • C++封裝線程類的實(shí)現(xiàn)方法

    C++封裝線程類的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++封裝線程類的實(shí)現(xiàn)方法,實(shí)例介紹了針對線程的創(chuàng)建、調(diào)用等方法的封裝操作,需要的朋友可以參考下
    2014-10-10
  • C++特性:迭代器

    C++特性:迭代器

    這篇文章主要介紹了C++特性:迭代器,本文主要通過介紹迭代器,迭代器和指針的區(qū)別,容器迭代器的使用等方面,需要的朋友可以參考下
    2021-06-06
  • C++ GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    C++ GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    GDI+(Graphics Device Interface Plus)是一種用于圖形繪制和圖像處理的應(yīng)用程序編程接口(API),在Windows平臺上廣泛使用,本文就來介紹一下如何使用GDI實(shí)現(xiàn)圖片格式轉(zhuǎn)換吧
    2023-12-12
  • C++實(shí)現(xiàn)簡易的五子棋游戲

    C++實(shí)現(xiàn)簡易的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++設(shè)計(jì)模式之策略模式(Strategy)

    C++設(shè)計(jì)模式之策略模式(Strategy)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之策略模式Strategy ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別介紹

    C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別介紹

    這篇文章主要介紹了C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別,X86和ARM是占據(jù)CPU市場的兩大處理器,各有優(yōu)劣,本文給大家詳細(xì)介紹了兩者的區(qū)別,需要的朋友可以參考下
    2022-07-07
  • Qt學(xué)習(xí)之容器的使用詳解

    Qt學(xué)習(xí)之容器的使用詳解

    Qt容器主要優(yōu)點(diǎn)就是在所有的平臺上的運(yùn)行都表現(xiàn)的一致,并且它們都是隱含共享的,這篇文章就來和大家講講Qt中容器的具體用法吧,希望對大家有所幫助
    2023-03-03
  • C++11運(yùn)算符重載和向量類重載實(shí)例詳解(<<,>>,+,-,*等)

    C++11運(yùn)算符重載和向量類重載實(shí)例詳解(<<,>>,+,-,*等)

    這篇文章主要給大家介紹了關(guān)于C++11運(yùn)算符重載和向量類重載的相關(guān)資料,主要包括<<,>>,+,-,*等,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07

最新評論