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

