最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?auto關(guān)鍵字的小知識(shí)點(diǎn)分享

 更新時(shí)間:2023年05月24日 09:03:40   作者:云小逸  
這篇文章主要是來(lái)和大家介紹一些C++中的小知識(shí)點(diǎn),本文將從auto關(guān)鍵字開(kāi)始講起,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

前言

今天我們學(xué)習(xí)一些關(guān)于C++的一些小知識(shí)點(diǎn),碼字不易,希望多多支持

auto關(guān)鍵字(C++11)

1.類(lèi)型別名思考

隨著程序越來(lái)越復(fù)雜,程序中用到的類(lèi)型也越來(lái)越復(fù)雜,經(jīng)常體現(xiàn)在:

  • 類(lèi)型難于拼寫(xiě)
  • 含義不明確導(dǎo)致容易出錯(cuò)

就比如下面這段代碼:

#include <string>
#include <map>
int main()
{
	std::map<std::string, std::string> m{ { "apple", "蘋(píng)果" }, { "orange",
   "橙子" },
	  {"pear","梨"} };
	std::map<std::string, std::string>::iterator it = m.begin();
	while (it != m.end())
	{
		//....
	}
	return 0;
}

std::map<std::string, std::string>::iterator是一個(gè)類(lèi)型,但是該類(lèi)型太長(zhǎng)了,特別容易寫(xiě)錯(cuò)。聰明的同學(xué)可能已經(jīng)想到:可以通過(guò)typedef給類(lèi)型取別名,比如:

使用typedef取別名

#include <string>
#include <map>
typedef std::map<std::string, std::string> Map;
int main()
{
	Map m{ { "apple", "蘋(píng)果" },{ "orange", "橙子" }, {"pear","梨"} };
	Map::iterator it = m.begin();
	while (it != m.end())
	{
		//....
	}
	return 0;
}

但是:使用typedef給類(lèi)型取別名確實(shí)可以簡(jiǎn)化代碼,但是typedef有會(huì)遇到新的難題:

使用typedef來(lái)為類(lèi)型取別名可以提高代碼的可讀性和可維護(hù)性,但在某些情況下,過(guò)度使用或不恰當(dāng)使用typedef可能會(huì)導(dǎo)致代碼變得復(fù)雜、難以理解或難以調(diào)試。以下是一個(gè)關(guān)于使用typedef取類(lèi)型別名的不好之處的例子:

typedef int* IntPtr;
void foo(IntPtr ptr) {
    // 一些代碼邏輯
}
int main() {
    int num = 5;
    IntPtr ptr = &num;
    foo(ptr);
    return 0;
}

在上述示例中,typedef被用于將int*類(lèi)型定義為IntPtr類(lèi)型的別名。然而,這種命名方式可能會(huì)產(chǎn)生誤導(dǎo),讓人誤以為IntPtr是一個(gè)指向整型的指針,而不是一個(gè)整型指針。這種混淆可能導(dǎo)致代碼閱讀和調(diào)試時(shí)的困惑。

此外,使用typedef的過(guò)度使用可能導(dǎo)致代碼中出現(xiàn)大量的類(lèi)型別名,使得代碼變得難以理解。例如,當(dāng)存在多個(gè)具有不同功能的指針類(lèi)型時(shí),使用過(guò)多的typedef可能會(huì)使代碼變得混亂,增加了理解和維護(hù)的難度。

綜上所述,不當(dāng)或過(guò)度使用typedef可能會(huì)使代碼變得復(fù)雜,難以理解和難以調(diào)試,從而影響代碼的可讀性和可維護(hù)性。因此,在使用typedef時(shí)需要慎重考慮,并確保起到提高代碼可讀性的作用,而不是增加代碼的復(fù)雜性。

2.auto簡(jiǎn)介

1.在早期C/C++中auto的含義是:使用 auto修飾的變量,是具有自動(dòng)存儲(chǔ)器的局部變量 ,但遺憾的是一直沒(méi)有人去使用它,大家可思考下為什么?

2.C++11中,標(biāo)準(zhǔn)委員會(huì)賦予了auto全新的含義即:auto不再是一個(gè)存儲(chǔ)類(lèi)型指示符,而是作為一個(gè)新的類(lèi)型指示符來(lái)指示編譯器,auto聲明的變量必須由編譯器在編譯時(shí)期推導(dǎo)而得。 舉例:

#include<iostream>
using namespace std;
int TestAuto()
{
	return 10;
}
int main()
{
	int a = 10;
	auto b = a;
	auto c = 'a';
	auto d = TestAuto();
	cout << typeid(b).name() << endl;
	cout << typeid(c).name() << endl;
	cout << typeid(d).name() << endl;
	//auto e; 無(wú)法通過(guò)編譯,使用auto定義變量時(shí)必須對(duì)其進(jìn)行初始化
	return 0;
}

注意

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

3.auto的使用細(xì)則

auto與指針和引用結(jié)合起來(lái)使用

用auto聲明指針類(lèi)型時(shí),用auto和auto沒(méi)有任何區(qū)別,但用auto聲明引用類(lèi)型時(shí)則必須加&

#include<iostream>
using namespace std;
int main()
{
    int x = 10;
    auto a = &x;
    auto* b = &x;
    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;
}

在同一行定義多個(gè)變量

當(dāng)在同一行聲明多個(gè)變量時(shí),這些變量必須是相同的類(lèi)型,否則編譯器將會(huì)報(bào)錯(cuò),因?yàn)榫幾g器實(shí)際只對(duì)第一個(gè)類(lèi)型進(jìn)行推導(dǎo),然后用推導(dǎo)出來(lái)的類(lèi)型定義其他變量 。

void TestAuto()
{
    auto a = 1, b = 2; 
    auto c = 3, d = 4.0;  // 該行代碼會(huì)編譯失敗,因?yàn)閏和d的初始化表達(dá)式類(lèi)型不同
}

4.auto不能推導(dǎo)的場(chǎng)景

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

// 此處代碼編譯失敗,auto不能作為形參類(lèi)型,因?yàn)榫幾g器無(wú)法對(duì)a的實(shí)際類(lèi)型進(jìn)行推導(dǎo)
void TestAuto(auto a)
{}

auto不能直接用來(lái)聲明數(shù)組

void TestAuto()
{
    int a[] = {1,2,3};
    auto b[] = {4,5,6};
}

為了避免與C++98中的auto發(fā)生混淆,C++11只保留了auto作為類(lèi)型指示符的用法

auto在實(shí)際中最常見(jiàn)的優(yōu)勢(shì)用法就是跟以后會(huì)講到的C++11提供的新式為循環(huán),還有l(wèi)ambda表達(dá)式等進(jìn)行配合使用。

注意事項(xiàng)

到此這篇關(guān)于C++ auto關(guān)鍵字的小知識(shí)點(diǎn)分享的文章就介紹到這了,更多相關(guān)C++ auto關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C/C++實(shí)現(xiàn)對(duì)STORM運(yùn)行信息查看及控制的方法

    C/C++實(shí)現(xiàn)對(duì)STORM運(yùn)行信息查看及控制的方法

    這篇文章主要介紹了C/C++實(shí)現(xiàn)對(duì)STORM運(yùn)行信息查看及控制的方法,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理示例詳解

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理示例詳解

    在C語(yǔ)言編程中,動(dòng)態(tài)內(nèi)存管理是一項(xiàng)核心技能,它允許程序在運(yùn)行時(shí)靈活地分配和釋放內(nèi)存,這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12
  • vs2022重新編譯opencv-python?cuda加速時(shí)報(bào)錯(cuò)的問(wèn)題解決

    vs2022重新編譯opencv-python?cuda加速時(shí)報(bào)錯(cuò)的問(wèn)題解決

    本文主要介紹了vs2022重新編譯opencv-python?cuda加速時(shí)報(bào)錯(cuò),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++ 之explicit關(guān)鍵字

    C++ 之explicit關(guān)鍵字

    今天我們來(lái)談?wù)凜++中的explicit關(guān)鍵字,這篇文章詳細(xì)介紹了C語(yǔ)言的關(guān)鍵字explicit關(guān)鍵字,本文有詳細(xì)的代碼實(shí)例,感興趣的同學(xué)可以借鑒參考
    2023-04-04
  • C++遍歷某個(gè)文件夾下面的子文件夾及其所有文件

    C++遍歷某個(gè)文件夾下面的子文件夾及其所有文件

    這篇文章主要介紹了C++獲取某個(gè)文件夾下面的子文件夾及其所有文件,需要的朋友可以參考下
    2021-07-07
  • C++容器std::vector的swap()函數(shù)使用方式

    C++容器std::vector的swap()函數(shù)使用方式

    這篇文章主要介紹了C++容器std::vector的swap()函數(shù)使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C語(yǔ)言中的const如何保證變量不被修改

    C語(yǔ)言中的const如何保證變量不被修改

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中const如何保證變量不被修改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C++ auto和decltype的用法和區(qū)別全解析

    C++ auto和decltype的用法和區(qū)別全解析

    這篇文章介紹了C++11和C++14中auto和decltype關(guān)鍵字的用法和區(qū)別,auto用于自動(dòng)類(lèi)型推導(dǎo),適用于變量聲明,簡(jiǎn)化代碼并提高可維護(hù)性,decltype用于查詢(xún)表達(dá)式的類(lèi)型,保留表達(dá)式的完整類(lèi)型信息,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • c/c++中opencv實(shí)現(xiàn)腐蝕的示例代碼

    c/c++中opencv實(shí)現(xiàn)腐蝕的示例代碼

    圖像腐蝕是形態(tài)學(xué)圖像處理中的一種基本操作,OpenCV的cv::erode函數(shù)實(shí)現(xiàn)該功能,具有一定的參考價(jià)值,感興趣的了解一下
    2025-06-06

最新評(píng)論

简阳市| 乌拉特后旗| 文成县| 怀集县| 昔阳县| 改则县| 双流县| 台江县| 遂昌县| 东光县| 当阳市| 云浮市| 保山市| 南澳县| 宜宾市| 黔东| 班玛县| 佛坪县| 平谷区| 河曲县| 沅陵县| 东山县| 介休市| 贞丰县| 原阳县| 泸水县| 大英县| 长沙县| 南昌县| 保康县| 安阳市| 翼城县| 山丹县| 弋阳县| 黄冈市| 东丰县| 中卫市| 柏乡县| 稷山县| 台北县| 临沂市|