日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【小白学习C++ 教程】二十、C++ 中的auto关键字

發(fā)布時間:2024/10/8 c/c++ 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学习C++ 教程】二十、C++ 中的auto关键字 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

@Author: Runsen

在 C++ 11 之前,每種數(shù)據(jù)類型都需要在編譯時顯式聲明,在運行時限制表達式的值,但在 C++ 新版本之后,包含了許多關(guān)鍵字,允許程序員將類型推導(dǎo)留給編譯器本身。

有了類型推斷功能,我們可以花更少的時間寫出編譯器已經(jīng)知道的東西。由于所有類型都是在編譯階段推導(dǎo)出來的,編譯時間略有增加,但不影響程序的運行時間。

auto 關(guān)鍵字

auto 關(guān)鍵字指定正在聲明的變量的類型將自動從其初始值設(shè)定項中扣除。對于函數(shù),如果它們的返回類型是 auto,那么它將在運行時由返回類型表達式求值。

用 auto 關(guān)鍵字聲明的變量只能在聲明時初始化,否則會出現(xiàn)編譯時錯誤

例如:

auto c = a(int)+ b(double)

在上面的代碼段中,a是整型,b是雙精度型,那么通過編譯器的分析,c就被定義成了雙精度型。

#include <bits/stdc++.h> using namespace std;int main() {auto x = 4;auto y = 3.37;auto ptr = &x;cout << typeid(x).name() << endl<< typeid(y).name() << endl<< typeid(ptr).name() << endl;return 0; }

輸出

i d Pi

使用 typeid 來獲取變量的類型。typeid 是一個運算符,用于需要知道對象的動態(tài)類型的地方。typeid(x).name() 返回 x 數(shù)據(jù)類型的簡寫名稱,例如,它返回 i 表示整數(shù),d 表示雙精度,Pi表示整數(shù)指針等。但返回的實際名稱主要取決于編譯器。

auto 的一個很好的用途是在為容器創(chuàng)建迭代器時避免長時間的初始化。

#include <iostream> #include <set> using namespace std; int main() {// Create a set of stringsset<string> st;st.insert({ "runsen", "is","22" });for (auto it = st.begin();it != st.end(); it++)cout << *it << " ";return 0; }

輸出

22 is runsen

對于有序STL,輸出是有順的

#include <iostream> #include <vector> using namespace std; int main() {vector<int> st;st.push_back(1);st.push_back(2);st.push_back(3);for(auto it = st.begin() ; it != st.end();it++ )cout << *it << endl;return 0; }

輸出

1 2 3

接下來,看一下 auto 和 const 的結(jié)合:

int x = 0; const auto n = x; //n 為 const int ,auto 被推導(dǎo)為 int auto f = n; //f 為 const int,auto 被推導(dǎo)為 int(const 屬性被拋棄) const auto &r1 = x; //r1 為 const int& 類型,auto 被推導(dǎo)為 int auto &r2 = r1; //r1 為 const int& 類型,auto 被推導(dǎo)為 const int 類型

下面我們來解釋一下:

  • 第 2 行代碼中,n 為 const int,auto 被推導(dǎo)為 int。

  • 第 3 行代碼中,n 為 const int 類型,但是 auto 卻被推導(dǎo)為 int 類型,這說明當(dāng)=右邊的表達式帶有 const 屬性時, auto 不會使用 const 屬性,而是直接推導(dǎo)出 non-const 類型。

  • 第 4 行代碼中,auto 被推導(dǎo)為 int 類型,這個很容易理解,不再贅述。

  • 第 5 行代碼中,r1 是 const int & 類型,auto 也被推導(dǎo)為 const int 類型,這說明當(dāng) const 和引用結(jié)合時,auto 的推導(dǎo)將保留表達式的 const 類型。

**auto一般會忽略掉頂層const,但底層const會被保留下來,**比如當(dāng)初始值是一個指向常量的指針時:

  • int i = 0;
  • const int ci = i, &cr = ci; //ci 為整數(shù)常量,cr 為整數(shù)常量引用 auto a = ci; // a 為一個整數(shù), 頂層const被忽略
  • auto b = cr; // b 為一個整數(shù),頂層const被忽略
  • auto c = &ci; // c 為一個整數(shù)指針.
  • auto d = &cr; // d 為一個指向整數(shù)常量的指針(對常量對象區(qū)地址是那么const會變成底層const)

如果想編譯器推斷出的是一個頂層的const類型,需要進行明確說明:
const auto f = ci;

總結(jié)

以上是生活随笔為你收集整理的【小白学习C++ 教程】二十、C++ 中的auto关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。