最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中auto類型說明符詳解(附易錯實例)

 更新時間:2023年07月21日 15:29:12   作者:陳大大陳  
這篇文章主要給大家介紹了關于C++中auto類型說明符的相關資料,文中還附易錯實例,在C++11中引入了auto類型說明符,用它就能讓編譯器替我們去分析表達式所屬的類型,需要的朋友可以參考下

基本概念

C++11標準引入了auto類型說明符,auto類型說明符可以讓編譯器來分析表達式所屬的類型

編譯器通過什么來分析表達式的類型?

答案是通過變量的初始值。

所以,auto定義的變量必須有初始值。

auto i = 1 + 3;

i的初始值是1和3相加的結果。編譯器會根據i的初始值自動推斷變量i的類型。

1和3都是int類型,所以i的類型就是int。

以此類推,倘若它倆都變成double類型,那么i的類型就是double。

使用auto也能在一條語句中聲明多個變量。

但是因為一條聲明語句只能有一個基本數據類型,所以該語句中所有變量的數據類型都必須一樣。

易錯點 

auto i=1+3,j=5;//正確,都為int類型
auto a=1.23,b=2//錯誤,一個double,一個int

需要注意的是,當使用auto聲明一個引用類型或者const類型時,就不能讓編譯器自主判斷了。

這種情況我們必須手動添加。

auto i=1+3;//i是int類型
auto &m=i;//m是綁定在i上面的一個int類型引用
const auto n=i;//n是值為4的常量

易錯實例

auto是非常方便的語法,但是不能濫用,可能會有意想不到的錯誤。

像下面的情況,請你找一下錯誤所在吧!

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s = "123";
	for (auto i = s.size() - 1; i >= 0; --i)
		cout << s[i];
	return 0;
}

實例詳解

你可能會自信地認為輸出的結果是321.

那么很遺憾,你的答案是錯誤的。

上面的代碼會輸出一堆亂碼。

原因就在于auto上面。

仔細研究一下auto i = s.size() - 1;i被推導成什么類型了?是int類型嗎?

事實上i被推導成了無符號整形。

因為s.size()返回的就是一個無符號整形。

無符號整形沒有負數,計算機會把無符號整形的-1,-2等負數解釋成非常大的正整數值

所以上述代碼一直滿足i >= 0的條件。

C++里沒有越界檢測機制,即使正整數的值已經超過了字符串的長度,循環(huán)體依舊可以成功運行。

所以程序會莫名其妙的輸出亂碼。

而且,即使i從正整數值遞減到0,依然會因為剛才解釋的原因再次回到那個非常大的正整數值。

所以程序是一個死循環(huán)。

要解決死循環(huán)也非常簡單。

解決辦法

不用auto就行。。。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s = "123";
	for (int i = s.size() - 1; i >= 0; --i)
		cout << s[i];
	return 0;
}

一句話總結,auto雖好,也不要貪杯哦。。。

除非你確保auto推導出來的類型是你想要的 。

總結

到此這篇關于C++中auto類型說明符詳解的文章就介紹到這了,更多相關C++ auto類型說明符內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言實現超市信息管理系統(tǒng)課程設計

    C語言實現超市信息管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現超市信息管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++中如何修改const變量你知道嗎

    C++中如何修改const變量你知道嗎

    這篇文章主要為大家詳細介紹了C++修改const變量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 老生常談c++中的靜態(tài)成員

    老生常談c++中的靜態(tài)成員

    有時候需要類的一些成員與類本身相關聯,而不是與類的每個對象相關聯。比如類的所有對象都要共享的變量,這個時候我們就要用到類的靜態(tài)成員,今天通過實例代碼給大家詳細介紹,需要的朋友參考下吧
    2021-07-07
  • C語言入門學習之fgets()函數和fputs()函數

    C語言入門學習之fgets()函數和fputs()函數

    fgetc() 和 fputc() 函數每次只能讀寫一個字符,速度較慢,實際開發(fā)中往往是每次讀寫一個字符串或者一個數據塊,這樣能明顯提高效率,這篇文章主要給大家介紹了關于C語言入門學習之fgets()函數和fputs()函數的相關資料,需要的朋友可以參考下
    2021-11-11
  • OpenCV實現亂序碎片復原

    OpenCV實現亂序碎片復原

    這篇文章主要介紹了通過OpenCV 直方圖相似度對比,實現將4張打亂順序的碎片拼接復原并展示原圖。文中的示例代碼講解詳細,需要的朋友可以學習一下
    2021-12-12
  • 詳解C語言位域的使用與注意事項

    詳解C語言位域的使用與注意事項

    所謂“位域”是把一個字節(jié)中的二進位劃分為幾個不同的區(qū)域, 并說明每個區(qū)域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾個不同的對象用一個字節(jié)的二進制位域來表示。下面這篇文章就給大家介紹下關于C語言中位域的使用與注意事項。
    2016-12-12
  • 深入理解C++中的new/delete和malloc/free動態(tài)內存管理及區(qū)別介紹

    深入理解C++中的new/delete和malloc/free動態(tài)內存管理及區(qū)別介紹

    這篇文章主要介紹了深入理解C++中的new/delete和malloc/free動態(tài)內存管理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 一波二叉樹遍歷問題的C++解答實例分享

    一波二叉樹遍歷問題的C++解答實例分享

    這篇文章主要介紹了一波二叉樹遍歷問題的C++解答實例分享,包括節(jié)點打印和轉換為鏡像等問題的解答,需要的朋友可以參考下
    2016-02-02
  • VScode + keil開發(fā)環(huán)境搭建安裝使用過程

    VScode + keil開發(fā)環(huán)境搭建安裝使用過程

    這篇文章主要介紹了VScode + keil開發(fā)環(huán)境搭建及安裝使用過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • C++數據結構之單鏈表

    C++數據結構之單鏈表

    這篇文章主要介紹了C++數據結構之單鏈表,鏈表是由一個個結點鏈結成的。結點包括數據域和指針域兩部分,數據域用來存儲數據元素的信息,指針域用來存儲下一個結點的地址,更詳細內容請需要的小伙伴參考下面文章內容
    2022-01-01

最新評論

天津市| 老河口市| 渭源县| 丹巴县| 西充县| 越西县| 兴义市| 抚顺市| 望都县| 郴州市| 左权县| 马关县| 揭西县| 苍山县| 永善县| 吉木萨尔县| 涿州市| 庆云县| 鹤壁市| 任丘市| 平凉市| 孝感市| 安泽县| 大港区| 鹤庆县| 洛川县| 丰原市| 梧州市| 灵台县| 淅川县| 阳春市| 五莲县| 沿河| 阿坝县| 乐至县| 乐陵市| 交城县| 隆安县| 白银市| 龙陵县| 博客|