中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的內置基本類型和初始化

發布時間:2020-07-03 16:34:33 來源:網絡 閱讀:2996 作者:shu_ying 欄目:編程語言

  數據類型是程序的基礎:它告訴我們數據的意義以及我們能在數據上執行的操作。

  C++的內置數據類型分為兩組:基本類型和復合類型。如下所示:

C++的內置基本類型和初始化  

  bool類型的字面值為true和false:

  bool test = false;

  字面值true和false都可以通過提升轉換為int類型,true被轉換為1,而false被轉換為0:

  int ans = true;  // ans assigned 1
  int promise = false;  // promise assigned 0

整型short、int、long和long long

  C++的short、int、long和long long類型通過使用不同數目的位(bit)來存儲值,最多能夠表示4種不同的整數寬度。如果在所有的系統中,每種類型的寬度都相同,則使用起來將非常方便。例如,如果short總是16位,int總是32位,等等。不過生活并非那么簡單,沒有一種選擇能夠滿足所有的計算機設計要求。C++提供了一種靈活的標準,它確保了最小長度(從C語言借鑒而來),如下所示:

  •   short至少16位;

  •   int至少與short一樣長;

  •   long至少32位,且至少與int一樣長;

  •   long long至少64位,且至少與long一樣長。

  C++提供了大量的整型,應使用哪種類型呢?通常,int被設置為對目標計算機而言最為“自然”的長度。自然長度(natural size)指的是計算機處理起來效率最高的長度。如果沒有非常有說服力的理由來選擇其他類型,則應使用int。

初始化

  初始化將賦值與聲明合并在一起。可以使用字面值常量來初始化;也可以將變量初始化為另一個變量,條件是后者已經定義過;甚至可以使用表達式來初始化變量,條件是當程序執行到該聲明時,表達式中所有的值都是已知的。如下:

  int uncles = 5;  // initialize uncles to 5
  int aunts = uncles;  // initialize aunts to 5
  int chairs = aunts + uncles + 4;  // initialize chairs to 14

  如果將uncles的聲明移到語句列表的最后,則另外兩條初始化語句將非法,因為這樣當程序試圖對其他變量進行初始化時,uncles的值是未知的。

  前面的初始化語法來自C語言,C++還有另一種C語言沒有的初始化語法:

  int owls = 101;  // traditional C initialization, sets owls to 101
  int wrens(432);  // alternative C++ syntax,set wrens to 432

  警告如果不對函數內部定義的變量進行初始化,該變量的值將是不確定的。這意味著該變量的值將是它被創建之前,相應內存單元保存的值。

  如果知道變量的初始值應該是什么,則應對它進行初始化。

C++11的初始化方式

  還有一種初始化方式,這種方式用于數組和結構,但在C++98中,也可用于單值變量:

  int hamburgers = {24};  // set hamburgers to 24

  將大括號初始化器用于單值變量的情形還不多,但C++11標準使得這種情形更多了。首先,采用這種方式時,可以使用等號(=),也可以不使用:

  int emus{7};  // set emus to 7
  int rheas = {12};  // set rheas to 12

  其次,大括號內可以不包含任何東西。在這種情況下,變量將被初始化為零:

  int rocs = {};  // set rocs to 0
  int psychics{};  // set psychics to 0

  第三,這有助于更好地防范類型轉換錯誤。關于這個主題有如下說明:

  C++將使用大括號的初始化稱為列表初始化(list-initialization),因為這種初始化常用于給復雜的數據類型提供值列表。與其他初始化方式相比,列表初始化對類型的要求更嚴格。具體地說,列表初始化不允許縮窄(narrowing),即變量的類型可能無法表示賦給它的值。例如,不允許將浮點型轉換為整型。在不同的整型之間轉換或將整型轉換為浮點型可能被允許,條件是編譯器知道目標變量能夠正確地存儲賦給它的值。例如,可將long變量初始化為int值,因為long總是至少與int一樣長;相反方向的轉換也可能被允許,只要int變量能夠存儲賦給它的long常量:

  const int code = 66;
  int x = 66;
  char c1 {31325};  // narrowing, not allowed
  char c2 = {66};  // allowed because char can hold 66
  char c3 {code};  // ditto(同上)
  char c4 = {x};  // not allowed, x is not constant
  x = 31325;
  char c5 = x;  // allowed by this form of initialization

  在上述代碼中,初始化c4時,您知道x的值為66,但在編譯器看來,x是一個變量,其值可能很大。編譯器不會跟蹤下述階段可能發生的情況:從x被初始化到它被用來初始化c4。

為什么需要更多的初始化方法?

  為何需要更多的初始化方法?有充分的理由嗎?原因是讓新手更容易學習C++,這可能有些奇怪。以前,C++使用不同的方式來初始化不同的類型:初始化類變量的方式不同于初始化常規結構的方式,而初始化常規結構的方式又不同于初始化簡單變量的方式;通過使用C++新增的大括號初始化器,初始化常規變量的方式與初始化類變量的方式更像。C++11使得可將大括號初始化器用于任何類型(可以使用等號,也可以不使用),這是一種通用的初始化語法。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河东区| 盘山县| 盐津县| 车致| 楚雄市| 南川市| 安阳县| 江阴市| 大名县| 长垣县| 台北县| 旌德县| 宁南县| 黄大仙区| 吉安市| 庆云县| 汉沽区| 洮南市| 广西| 呼和浩特市| 长沙县| 孟州市| 伊川县| 鄄城县| 马鞍山市| 庆安县| 延庆县| 青龙| 文昌市| 荆门市| 溧阳市| 平泉县| 景洪市| 黑龙江省| 乌鲁木齐市| 凯里市| 崇义县| 曲阳县| 上饶市| 宁明县| 秀山|