C++面試八股文之了解auto關(guān)鍵字
引言
某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第15面:
面試官:了解auto關(guān)鍵字嗎?
二師兄:嗯,了解一些(我很熟悉)。
面試官:說(shuō)一說(shuō)auto的用法吧?
二師兄:auto主要是為了編譯器進(jìn)行類(lèi)型推導(dǎo)。比如:
auto i = 42; //i 被推導(dǎo)位int型
std::vector<int> vi;
for(auto it = vi.cbegin(); it != vi.cend(); ++it)
{
std::cout << *it << std::endl;
} //迭代器的類(lèi)型又臭又長(zhǎng)
auto l_fun = [](int a, int b){return a+b;} //lambda的類(lèi)型基本上不可能手寫(xiě)出來(lái)二師兄:也可以作為函數(shù)返回類(lèi)型的占位符:
auto add(int a, int b)->(decltype(a+b))
{
return a + b;
} //C++11
auto add(int a, int b)
{
return a + b;
} //C++14及以后二師兄:在C++20中還可以推導(dǎo)參數(shù)的類(lèi)型,從而實(shí)現(xiàn)類(lèi)似模板的效果:
auto add(auto a,auto b)
{
return a+b;
} //C++20 此時(shí)可以這樣使用 auto res = add(std::string("hello"),"world");
//類(lèi)似以下效果,不過(guò)上面的寫(xiě)法更簡(jiǎn)潔
template<typename T,typename U>
auto add(T&& t, U&& u)->decltype(t+u)
{
return t + u;
}面試官:嗯,不錯(cuò)。你覺(jué)得auto有哪些好處?
二師兄:主要有三點(diǎn)吧。一是使用auto關(guān)鍵字定義的變量必須被初始化。
int a; //未初始化,直接使用是未定義的行為 auto b; //無(wú)法通過(guò)編譯,必須被初始化 auto b = 1024; //等于 int b = 1024;
這個(gè)特征可以避免變量未初始化就使用所導(dǎo)致的未定義的行為。第二點(diǎn)就是減少五吳意義的代碼,如迭代器的類(lèi)型、lambda表達(dá)式的類(lèi)型等。第三就是簡(jiǎn)化泛型編程。如前文代碼所示。
面試官:好的。你還有什么要補(bǔ)充的嗎?
二師兄:哦,還有一點(diǎn),auto關(guān)鍵字在定義多個(gè)變量時(shí),多個(gè)變量要推導(dǎo)出同一類(lèi)型才可通過(guò)編譯:
auto a = 42, b = 3.14; //無(wú)法通過(guò)編譯 auto a = 42, b = 1024; //a,b被推導(dǎo)位int型
面試官:好的,今天的面試就到這里,回去等通知吧。
今日二師兄的表現(xiàn)很好,基本上回答出了auto關(guān)鍵字的語(yǔ)法特性。實(shí)際上auto關(guān)鍵字在C++98/03中就有了,當(dāng)作自動(dòng)變量修飾符使用:
int main(int argc, char* argv[])
{
int a = 42; //自動(dòng)變量
auto int b = 1024; //自動(dòng)變量
}大伙應(yīng)該能看出來(lái),在C++98/03中的auto關(guān)鍵字是否存在都不影響程序正確性,所以很少有程序員在在C++98/03使用auto關(guān)鍵字。C++標(biāo)準(zhǔn)委員會(huì)在C++11標(biāo)準(zhǔn)的制定中想到了被冷落的auto關(guān)鍵字,并在C++11新標(biāo)準(zhǔn)中賦予了它新的能力。
以上就是C++面試八股文之a(chǎn)uto關(guān)鍵字的詳細(xì)內(nèi)容,更多關(guān)于C++面試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實(shí)現(xiàn)簡(jiǎn)單職工信息管理系統(tǒng)
本文給大家分享的是使用C++實(shí)現(xiàn)簡(jiǎn)單的職工信息管理系統(tǒng)的代碼,本系統(tǒng)采用了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,所有的方法均以類(lèi)為基礎(chǔ),感興趣的小伙伴們可以參考一下2015-08-08
總結(jié)C語(yǔ)言中const關(guān)鍵字的使用
一起雖然學(xué)過(guò)c語(yǔ)言,但是并沒(méi)有寫(xiě)過(guò)太多的代碼,最近想要拾起c語(yǔ)言,就寫(xiě)了一些代碼,但是對(duì)const關(guān)鍵字比較陌生,這里總結(jié)一下,方法自己和大家有需要的時(shí)候參考借鑒,下面跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
解析C++函數(shù)的默認(rèn)參數(shù)和占位參數(shù)及較之C語(yǔ)言的拓展
這篇文章主要介紹了C++中的默認(rèn)參數(shù)和占位參數(shù)及較之C語(yǔ)言的拓展,需要的朋友可以參考下2016-03-03
vs2019創(chuàng)建WebService服務(wù)的實(shí)現(xiàn)
這篇文章主要介紹了vs2019創(chuàng)建WebService服務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
C語(yǔ)言 結(jié)構(gòu)體數(shù)組詳解及示例代碼
本文主要介紹C語(yǔ)言 結(jié)構(gòu)體數(shù)組,這里整理了相關(guān)資料及簡(jiǎn)單示例代碼,以便大家學(xué)習(xí)參考,有興趣的小伙伴可以看下2016-08-08
C++右值引用與move和forward函數(shù)的使用詳解
為了支持移動(dòng)操作,新標(biāo)準(zhǔn)引入了一種新的引用類(lèi)型——右值引用(rvalue reference)。所謂右值引用就是必須綁定到右值的引用,這篇文章主要介紹了C++右值引用與move和forward的使用2022-08-08
c++如何控制對(duì)象的創(chuàng)建方式(禁止創(chuàng)建棧對(duì)象or堆對(duì)象)和創(chuàng)建的數(shù)量
這篇文章主要介紹了c++如何控制對(duì)象的創(chuàng)建方式和創(chuàng)建的數(shù)量,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08

