欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11系列學(xué)習(xí)之類型推導(dǎo)

 更新時(shí)間:2022年04月25日 09:13:13   作者:小杰編程  
這篇文章主要介紹了C++11系列學(xué)習(xí)之類型推導(dǎo),文章基于C++的相關(guān)資料展開對(duì)主題的詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可參考一下

auto類型推導(dǎo)

C++舊標(biāo)準(zhǔn):

具有自動(dòng)存儲(chǔ)的局部變量

auto int i = 0 //C++98

實(shí)際上我們一般不這樣寫,因?yàn)榉莝tatic變量默認(rèn)就是具有自動(dòng)存儲(chǔ)的局部變量

C++11:

讓編譯器自動(dòng)推斷出這個(gè)變量的類型,而不需要顯式指定類型

auto基本用法

演示:

auto x = 5 //x --> int
auto pi = new auto(1) //pi --> int*
const auto *v = &x, u = 6 //v --> const int* 、 u --> const int
static auto y = 0.0 //y --> double
int x = 0
auto * a = &x //a --> int* , auto為int
auto b = &x //b --> int* , auto 為 int*
auto c = x //c --> int& , auto為int
auto d = c //d --> int , auto為int
const auto e = x //e --> const int
auto f = e //f --> int
const auto& g = x //g --> const int&
auto& h = g //h --> const int&

上面就是通常會(huì)出現(xiàn)的所有情況,其實(shí)可以類比模板參數(shù)自動(dòng)推導(dǎo)

auto 不能用于函數(shù)參數(shù)

auto 推導(dǎo)規(guī)則

黃金法則

  • 當(dāng)不聲明為指針或引用時(shí),auto的推到結(jié)果和初始化表達(dá)式拋棄引用和cv限定符(cosnt 和 volatile,下同)后類型一致
  • 當(dāng)聲明為指針或引用時(shí),auto的推到結(jié)果將保持初始化表達(dá)式的cv屬性

auto 的限制

  • 不能用于函數(shù)參數(shù)
  • 不支持非靜態(tài)成員變量的初始化
  • main函數(shù)中auto不會(huì)被推導(dǎo)為數(shù)組類型,而是指針類型

auto 適用場景

場景一:for循環(huán)中用來遍歷容器

for(auto it = resultMap.begin(); it != resultMap.end(); ++i){
//do something
}

場景二:用于不知道如何定義變量,多與泛型有關(guān)

class Foo{
public:
static int get(void)
{
return 0;
}
};
class Bar{
public:
static const char* get(void)
{
return "0";
}
};
template<class A>
void func(void)
{
auto val = A::get();
// ...
}

decltype 類型推導(dǎo)

decltype( exp )

exp 表示一個(gè)表達(dá)式
從格式上來看,decltype像sizeof ,但其用來在編譯時(shí)推導(dǎo)出一個(gè)表達(dá)式的類型

decltype 基本用法

int x = 0
decltype(x) y = 1 //y -> int
decltype(x + y) z = 0 //z -> int
const int& i = x
decltype(i) j = y //j -> const int &
cosnt decltype(z) *p = &z //*p -> const int, p -> const int *
decltype(z) * pi = &z //*pi -> int , pi -> int*
decltype(pi) * pp = &pi //*pp -> int * ,pp -> int **

decltype和&結(jié)合的推導(dǎo)結(jié)果,與引用折疊規(guī)則有關(guān),將在本系列后續(xù)中詳細(xì)講解

decltype 推導(dǎo)規(guī)則

黃金法則:

  • exp是標(biāo)識(shí)符、類訪問表達(dá)式,decltype(exp) 和exp的類型一致
  • exp是寒素調(diào)用,decltype(exp) 和返回值 的類型一致
  • 其他情況,若exp是個(gè)左值,則 ecltype(exp) 是exp類型的左值引用,否則和exp類型一致

decltype 適用場景

decltype適用于泛型相關(guān)

場景一:

標(biāo)準(zhǔn)庫中有些類型的定義

typedef decltype(nullptr) nullptr_t
typedef decltype(sizeof(0)) size_t
`

場景二:

通過變量表達(dá)式抽取變量類型實(shí)現(xiàn)簡寫

vector<int> v;
decltype(v):value_type i = 0

場景三:

template<class ContainerT>
class Foo
{
decltype(ContainerT().begin()) it_;
public:
void func(ContarinerT& container)
{
it_ = container.begin();
}
// ...
}

auto 和 decltype結(jié)合——返回類型后置

即通過兩個(gè)結(jié)合起來,使得語法更加靈活便捷

int & foo(int& i);
float foo(float& f)
template<typename T>
auto fun(T& val) -> decltype(foo(val))
{
return foo(val);
}

小結(jié)

autodecltype的出現(xiàn)不僅彌補(bǔ)了C++舊版標(biāo)準(zhǔn)的不足,也大大解放了開發(fā)人員的生產(chǎn)力,提升了效率。但是我們?cè)谑褂玫臅r(shí)候仍然需要注意,不能濫用,否則會(huì)出現(xiàn)我們期望得到的類型和最終程序的類型不一致,導(dǎo)致一些意想不到的BUG,給我維護(hù)增加了成本,適用和巧用才是正解!

到此這篇關(guān)于C++11系列學(xué)習(xí)之類型推導(dǎo)的文章就介紹到這了,更多相關(guān)C++11類型推導(dǎo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2022連接sqlserver數(shù)據(jù)庫教程

    VS2022連接sqlserver數(shù)據(jù)庫教程

    本文主要介紹了VS2022連接sqlserver數(shù)據(jù)庫教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++求解二叉樹的下一個(gè)結(jié)點(diǎn)問題

    C++求解二叉樹的下一個(gè)結(jié)點(diǎn)問題

    本文將通過C++求解以下問題:給定一個(gè)二叉樹其中的一個(gè)結(jié)點(diǎn),請(qǐng)找出中序遍歷順序的下一個(gè)結(jié)點(diǎn)并且返回。文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-04-04
  • C語言中bool變量的深入理解

    C語言中bool變量的深入理解

    C語言中沒有BOOL類型變量,它是C++獨(dú)有的,由于使用BOOL類型可以使代碼更具有可讀性,下面這篇文章主要給大家介紹了關(guān)于C語言中bool變量的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • VC小技巧匯總之窗口技巧

    VC小技巧匯總之窗口技巧

    這篇文章主要介紹了VC小技巧匯總之窗口技巧,功能非常實(shí)用,對(duì)于VC開發(fā)有一定借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • c語言實(shí)現(xiàn)順序表的基本操作

    c語言實(shí)現(xiàn)順序表的基本操作

    這篇文章主要介紹了c語言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2014-03-03
  • VC++ 6.0 C語言實(shí)現(xiàn)俄羅斯方塊詳細(xì)教程

    VC++ 6.0 C語言實(shí)現(xiàn)俄羅斯方塊詳細(xì)教程

    這篇文章主要為大家介紹了VC++ 6.0 C語言實(shí)現(xiàn)俄羅斯方塊詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值

    c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值

    這篇文章主要介紹了c語言中實(shí)現(xiàn)數(shù)組幾個(gè)數(shù)求次大值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 詳解為什么指針被譽(yù)為C語言靈魂

    詳解為什么指針被譽(yù)為C語言靈魂

    說到指針,就不可能脫離開內(nèi)存,學(xué)會(huì)指針的人分為兩種,一種是不了解內(nèi)存模型,另外一種則是了解。不了解的對(duì)指針的理解就停留在“指針就是變量的地址”這句話,會(huì)比較害怕使用指針,特別是各種高級(jí)操作。本文將帶你詳細(xì)了解C語言指針
    2021-06-06
  • C語言實(shí)現(xiàn)數(shù)字炸彈小游戲

    C語言實(shí)現(xiàn)數(shù)字炸彈小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)數(shù)字炸彈小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++中的volatile關(guān)鍵字及其作用

    C++中的volatile關(guān)鍵字及其作用

    本文介紹了C++中的volatile關(guān)鍵字,它用于標(biāo)識(shí)變量可能被意外修改,以及編譯器不應(yīng)進(jìn)行優(yōu)化。本文通過具體的代碼示例,闡述了volatile關(guān)鍵字的作用和使用方法,幫助讀者更好地了解該關(guān)鍵字在C++語言中的應(yīng)用場景和實(shí)現(xiàn)原理
    2023-04-04

最新評(píng)論