雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊:

前言

定義沒有初始化式的變量時,系統(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

網頁制作CMS教程網絡編程軟件編程腳本語言數據庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網 版權所有