国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】C++入門 auto關(guān)鍵字詳解(C++11)

這篇具有很好參考價值的文章主要介紹了【C++】C++入門 auto關(guān)鍵字詳解(C++11)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

C語言中包括了關(guān)鍵字auto,它可用于定義局部變量。但自從所有的非全局變量的缺省值假定為auto以來,auto就幾乎很少使用了。 在C或者以前C++中,auto關(guān)鍵字基本上可以被無視.

但是在C++11中auto不再是一個存儲類型指示符,而是作為一個新的類型指示符來指示編譯器,auto聲明的變量必須由編譯器在編譯時期推導而得。


一、C語言中的auto

在C語言的學習中我們幾乎用不到auto關(guān)鍵字,它的存在感實在是太低了?。?!
即便如此,我們還是為了C++中的auto的學習先復習一下C語言中的auto關(guān)鍵字吧。

1、C語言中,auto用于聲明一個變量為自動變量

自動變量也稱局部變量。auto關(guān)鍵字主要用于聲明變量的生存期為自動,即將不在任何類、結(jié)構(gòu)、枚舉、聯(lián)合和函數(shù)中定義的變量視為全局變量,而在函數(shù)中定義的變量視為局部變量。這個關(guān)鍵字經(jīng)常被省略,因為所有的局部變量默認就是auto的。

  1. 用auto聲明全局變量時,編譯出錯:
#include<stdio.h>
auto int i=0;  //編譯出錯
int main()
{
	return 0;
}
  1. auto聲明局部變量時,編譯正常:
#include<stdio.h>
int main()
{
	auto int i=0; 
	return 0;
}

2、C語言中,只使用auto修飾變量,變量的類型默認為整型

void main(void)
{
	float a = 3.2f, b = 2.1f;
	auto c = a + b;//c語言中,c = 5
}

二、C++中的auto

1、auto的基本介紹

在C++11中,auto是用來自動推導表達式或變量的實際類型的。
例如:

#include<iostream>
using namespace std;
int main()
{
	int a = 0;
	auto b = a;//此時b為int 類型
	cout << typeid(a).name() << endl;//typeid().name()可以自動識別變量的類型
	cout << typeid(b).name() << endl;
	return 0;
}

c++ auto,C++,c++,c語言,算法

可能你會覺得auto的這點功能好像可有可無啊,但其實隨著程序越來越復雜,程序中用到的類型也越來越復雜,經(jīng)常體現(xiàn)在:

  1. 類型難于拼寫
  2. 含義不明確導致容易出錯

例如這樣長的的變量類型std::map<std::string, std::string>::iterator我們完全可以使用一個auto來進行代替

下面的代碼可能你看不懂,但是你只需要理解這里auto的作用就行了。

#include <string>
#include <map>
int main()
{
	std::map<std::string, std::string> m{ { "apple", "蘋果" }, { "orange",
	"橙子" },{"pear","梨"} };
	std::map<std::string, std::string>::iterator it = m.begin();
	//auto it = m.begin();//與上一行代碼作用相同,只是auto更加方便

	return 0;
}

可能你會覺得C語言中的typedef關(guān)鍵字也能做到同樣的簡化代碼的效果,但是使用typedef有時會遇到新的難題。
例如:

typedef char* pstring;
int main()
{
const pstring p1; // 編譯成功還是失???
const pstring* p2; // 編譯成功還是失???
return 0;
}

答案是第一個編譯失敗,第二個編譯成功。

  • 第一個實際類型是:
char*const p1;

const修飾的是p1,p1是一個常變量,常變量的創(chuàng)建必須初始化,而且只能初始化一次,而上面的代碼并沒有進行初始化,因此報錯。

  • 第二個的實際類型是:
char*const* p2;

const修飾的是*p2,沒有問題。

通過上面的對比相信你也能體會到auto的作用了吧,在編程時,常常需要把表達式的值賦值給變量,這就要求在聲明變量的時候清楚地知道表達式的類型。然而有時候要做到這點并非那么容易,auto的出現(xiàn)就解決了這個問題。

2、auto的使用細則

1.使用auto定義變量時必須對其進行初始化

#include<iostream>
using namespace std;
int TestAuto()
{
	return 10;
}
int main()
{
	int a = 10;
	auto b = a;//變量
	auto c = 'a';//字符
	auto d = TestAuto();//函數(shù)返回值
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;

	//auto e; 無法通過編譯,使用auto定義變量時必須對其進行初始化
	return 0;
}

c++ auto,C++,c++,c語言,算法

使用auto定義變量時必須對其進行初始化,在編譯階段編譯器需要根據(jù)初始化表達式來推導auto的實際類型。因此auto并非是一種"類型"的聲明,而是一個類型聲明時的"占位符”,編譯器在編譯期會將auto替換為變量實際的類型。

2.auto與指針和引用結(jié)合起來使用

用auto聲明指針類型時,用auto和auto*沒有任何區(qū)別,但用auto聲明引用類型時則必須加&

#include<iostream>
using namespace std;
int main()
{
	int x = 10;
	auto a = &x;
	auto* b = &x;//使用auto*時,表達式右邊必須是指針,否則報錯
	auto& c = x;
	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	*a = 20;
	*b = 30;
	c = 40;
	return 0;
}

c++ auto,C++,c++,c語言,算法

3. 在同一行定義多個變量

當在同一行聲明多個變量時,這些變量必須是相同的類型,否則編譯器將會報錯,因為編譯器實際只對第一個類型進行推導,然后用推導出來的類型定義其他變量。

void TestAuto()
{
	auto a = 1, b = 2;
	auto c = 3, d = 4.0; // 該行代碼會編譯失敗,因為c和d的初始化表達式類型不同
}

3、auto不能推導的場景

1.auto不能作為函數(shù)的參數(shù)

// 此處代碼編譯失敗,auto不能作為形參類型,因為編譯器無法對a的實際類型進行推導
void TestAuto(auto a)
{
}

2.auto不能直接用來聲明數(shù)組

void TestAuto()
{
	int a[] = {1,2,3};
	auto b[] = {45,6};//報錯
}

tip:為了避免與C++98中的auto發(fā)生混淆,C++11只保留了auto作為類型指示符的用法文章來源地址http://www.zghlxwxcb.cn/news/detail-712652.html

到了這里,關(guān)于【C++】C++入門 auto關(guān)鍵字詳解(C++11)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包