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

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

 更新時(shí)間:2023年07月21日 15:29:12   作者:陳大大陳  
這篇文章主要給大家介紹了關(guān)于C++中auto類型說明符的相關(guān)資料,文中還附易錯(cuò)實(shí)例,在C++11中引入了auto類型說明符,用它就能讓編譯器替我們?nèi)シ治霰磉_(dá)式所屬的類型,需要的朋友可以參考下

基本概念

C++11標(biāo)準(zhǔn)引入了auto類型說明符,auto類型說明符可以讓編譯器來分析表達(dá)式所屬的類型。

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

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

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

auto i = 1 + 3;

i的初始值是1和3相加的結(jié)果。編譯器會(huì)根據(jù)i的初始值自動(dòng)推斷變量i的類型。

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

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

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

但是因?yàn)橐粭l聲明語句只能有一個(gè)基本數(shù)據(jù)類型,所以該語句中所有變量的數(shù)據(jù)類型都必須一樣。

易錯(cuò)點(diǎn) 

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

需要注意的是,當(dāng)使用auto聲明一個(gè)引用類型或者const類型時(shí),就不能讓編譯器自主判斷了。

這種情況我們必須手動(dòng)添加。

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

易錯(cuò)實(shí)例

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

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

#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;
}

實(shí)例詳解

你可能會(huì)自信地認(rèn)為輸出的結(jié)果是321.

那么很遺憾,你的答案是錯(cuò)誤的

上面的代碼會(huì)輸出一堆亂碼。

原因就在于auto上面。

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

事實(shí)上i被推導(dǎo)成了無符號整形。

因?yàn)?strong>s.size()返回的就是一個(gè)無符號整形。

無符號整形沒有負(fù)數(shù),計(jì)算機(jī)會(huì)把無符號整形的-1,-2等負(fù)數(shù)解釋成非常大的正整數(shù)值

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

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

所以程序會(huì)莫名其妙的輸出亂碼。

而且,即使i從正整數(shù)值遞減到0,依然會(huì)因?yàn)閯偛沤忉尩脑蛟俅位氐侥莻€(gè)非常大的正整數(shù)值。

所以程序是一個(gè)死循環(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;
}

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

除非你確保auto推導(dǎo)出來的類型是你想要的 。

總結(jié)

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

相關(guān)文章

  • C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)

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

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

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

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

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

    C語言入門學(xué)習(xí)之fgets()函數(shù)和fputs()函數(shù)

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

    OpenCV實(shí)現(xiàn)亂序碎片復(fù)原

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

    詳解C語言位域的使用與注意事項(xiàng)

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

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

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

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

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

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

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

    C++數(shù)據(jù)結(jié)構(gòu)之單鏈表

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之單鏈表,鏈表是由一個(gè)個(gè)結(jié)點(diǎn)鏈結(jié)成的。結(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分,數(shù)據(jù)域用來存儲數(shù)據(jù)元素的信息,指針域用來存儲下一個(gè)結(jié)點(diǎn)的地址,更詳細(xì)內(nèi)容請需要的小伙伴參考下面文章內(nèi)容
    2022-01-01

最新評論

湄潭县| 汤原县| 九台市| 长汀县| 红原县| 米林县| 阜新| 宣武区| 体育| 临洮县| 常宁市| 汕尾市| 定结县| 碌曲县| 大姚县| 崇文区| 天柱县| 渭南市| 沙坪坝区| 丹棱县| 商城县| 宕昌县| 延川县| 上饶县| 阿克陶县| 中超| 榆林市| 青冈县| 湘潭市| 皮山县| 平潭县| 丹阳市| 阿合奇县| 闵行区| 石棉县| 金平| 南昌市| 和平县| 陆良县| 和田市| 长治县|