初識(shí)C++(4)---C++入門-創(chuàng)新互聯(lián)

文章目錄
  • 內(nèi)聯(lián)函數(shù)
    • 概念
    • 特性
  • auto關(guān)鍵字
    • auto使用的一些規(guī)則
  • 基于范圍的for循環(huán)
    • 范圍for的語(yǔ)法
    • 范圍for的使用條件
  • 指針空值nullptr

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、鷹手營(yíng)子網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、鷹手營(yíng)子網(wǎng)絡(luò)營(yíng)銷、鷹手營(yíng)子企業(yè)策劃、鷹手營(yíng)子品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供鷹手營(yíng)子建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn
內(nèi)聯(lián)函數(shù) 概念

以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),在編譯的時(shí)候,

C++的編譯器會(huì)將內(nèi)聯(lián)函數(shù)展開(kāi)在調(diào)用內(nèi)聯(lián)函數(shù)的地方

(不是無(wú)條件的展開(kāi),這取決于編譯器,后面有詳細(xì)分析),這沒(méi)有函數(shù)壓棧的開(kāi)銷,

所以內(nèi)聯(lián)函數(shù)可以提升程序運(yùn)行的效率。

特性

inline是一種以空間換時(shí)間的做法,雖然省去了函數(shù)調(diào)用的系統(tǒng)開(kāi)銷,

但是展開(kāi)代碼使得代碼量增加,所以,在代碼很長(zhǎng),或者有循環(huán)和遞歸的函數(shù)

就不適宜使用內(nèi)聯(lián)函數(shù)了,即使使用了編譯器也會(huì)判斷是否適合展開(kāi),

有的編譯器認(rèn)為,代碼超過(guò)十行命令就是長(zhǎng)代碼,就不會(huì)展開(kāi)內(nèi)聯(lián)。

inline內(nèi)聯(lián)不建議將聲明和定義分離,分離之后會(huì)導(dǎo)致鏈接出現(xiàn)錯(cuò)誤,

因?yàn)閕nline被展開(kāi)之后,就沒(méi)有函數(shù)地址了,鏈接的時(shí)候會(huì)找不到函數(shù)地址。


auto關(guān)鍵字

auto關(guān)鍵字在C語(yǔ)言中沒(méi)有什么價(jià)值,

在C++11中,auto有了新的含義:

auto不再是一個(gè)存儲(chǔ)類型指示符,而是作為一個(gè)新的類型指示符來(lái)指示編譯器,

auto聲明的變量必須由編譯器在編譯時(shí)期推導(dǎo)而得。

說(shuō)通俗一點(diǎn)就是,auto可以自動(dòng)識(shí)別變量的類型,下面簡(jiǎn)單的驗(yàn)證一下

在這里插入圖片描述
需要注意的是:使用auto定義變量時(shí)必須對(duì)其進(jìn)行初始化,

因?yàn)樵诰幾g階段編譯器需要根據(jù)初始化的內(nèi)容來(lái)推導(dǎo)auto的類型是什么。

所以說(shuō),auto不是一種類型聲明,而是一個(gè)類型聲明的“占位符”,

編譯器編譯的時(shí)候就將auto替換成實(shí)際的類型。

auto使用的一些規(guī)則

auto可以和指針和引用結(jié)合使用,

auto定義指針類型時(shí),用auto和auto*沒(méi)有任何區(qū)別,

但用auto聲明引用類型時(shí)則必須加&

當(dāng)在同一行聲明多個(gè)變量時(shí),這些變量必須是相同的類型,否則編譯器將會(huì)報(bào)錯(cuò),

因?yàn)榫幾g器實(shí)際只對(duì)第一個(gè)類型進(jìn)行推導(dǎo),然后用推導(dǎo)出來(lái)的類型定義其他變量。

在這里插入圖片描述

auto也不是所有的地方都可以使用,

auto不可以作為函數(shù)的參數(shù)

auto不可以用來(lái)聲明數(shù)組類型

auto的實(shí)際用法并不是簡(jiǎn)單的像上面的使用,

當(dāng)變量的類型名很長(zhǎng)的時(shí)候就很適合用auto,還有其他的用法在后續(xù)的學(xué)習(xí)再了解。


基于范圍的for循環(huán) 范圍for的語(yǔ)法

對(duì)于一個(gè)有范圍的集合而言,由程序員來(lái)說(shuō)明循環(huán)的范圍是多余的,有時(shí)候還會(huì)容易犯錯(cuò)誤。

因此C++11中引入了基于范圍的for循環(huán)。

for循環(huán)后的括號(hào)由冒號(hào)“ :”分為兩部分:

第一部分是范圍內(nèi)用于迭代的變量,

第二部分則表示被迭代的范圍。

int main()
{//遍歷數(shù)組
	int arr[] = {1,2,3,4,5,6,7,8,9 };

	//平常做法
	for (int i = 0; i< sizeof(arr) / sizeof(int); i++)
	{cout<< arr[i]<< " ";
	}
	cout<< endl;
	//范圍for
	for (auto ret: arr)
	{cout<< ret<< " ";
	}
	return 0;
}

范圍for也和普通的循環(huán)類似,可以用continue結(jié)束本次循環(huán),用break跳出整個(gè)循環(huán)。

范圍for的使用條件

for循環(huán)迭代的范圍必須是確定的,

對(duì)于數(shù)組來(lái)說(shuō),就是數(shù)組中的第一個(gè)元素和最后一個(gè)元素。

對(duì)于類來(lái)說(shuō),就要提供確定開(kāi)頭begin和結(jié)尾end的方法,[begin,end]就是循環(huán)迭代的范圍。


指針空值nullptr

在C語(yǔ)言中,對(duì)于指針的初始化,一般都是給NULL,

NULL實(shí)際是一個(gè)宏,在傳統(tǒng)的C頭文件(stddef.h)中,可以看到如下代碼:

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

這就是條件編譯的應(yīng)用了,NULL定義為字面常量0,或者被定義為無(wú)類型指針(void*)的常量。

在C語(yǔ)言中使用NULL來(lái)對(duì)指針進(jìn)行置空沒(méi)有任何問(wèn)題,但是在C++中,可能會(huì)出現(xiàn)問(wèn)題

在這里插入圖片描述
在這段代碼中,我想要調(diào)用的函數(shù)應(yīng)該是指針的Func(),

但是NULL被定義成了0,所以就調(diào)用了別的函數(shù)。

在C++98中,字面常量0既可以是一個(gè)整形數(shù)字,也可以是無(wú)類型的指針(void*)常量,

但是編譯器默認(rèn)情況下將其看成是一個(gè)整形常量,

如果要將其按照指針?lè)绞絹?lái)使用,必須對(duì)其進(jìn)行強(qiáng)制類型轉(zhuǎn)換(void *)0。

所以在C++中,指針的置空更推薦使用nullptr,

使用nullptr的時(shí)候不用包含頭文件,這是C++11的關(guān)鍵字,

在C++11中,sizeof(nullptr)與sizeof((void)0)所占的字節(jié)數(shù)相同

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:初識(shí)C++(4)---C++入門-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article26/dejicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)Google、微信小程序網(wǎng)站維護(hù)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)