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

C++11如何引入的尾置返回類型

 更新時(shí)間:2023年01月10日 10:53:26   作者:smart_cat  
C++11 標(biāo)準(zhǔn)引入的尾置返回類型,可以讓返回復(fù)雜類型的函數(shù)聲明更加清晰易讀,在無(wú)法使用C++14 標(biāo)準(zhǔn)的情況下,通過(guò)尾置返回類型的語(yǔ)法來(lái)推導(dǎo)函數(shù)模板的返回類型無(wú)疑是最簡(jiǎn)便的方法,這篇文章主要介紹了C++11引入的尾置返回類型,需要的朋友可以參考下

一、什么是尾置返回類型(trailing return type)

我們先來(lái)看一下傳統(tǒng)的函數(shù)是怎么定義的:

int foo()
{
    return 0;
}

C++11 標(biāo)準(zhǔn)中引入了尾置返回類型后,上述函數(shù)也可定義為:

auto foo() -> int
{
    return 0;
}

其中 auto 是一個(gè)占位符,函數(shù)名后 -> 緊跟的 int 才是真正的返回類型。

當(dāng)然了,在這個(gè)例子中傳統(tǒng)的函數(shù)聲明方式顯然是更加簡(jiǎn)潔的,而當(dāng)返回類型比較復(fù)雜的時(shí)候,返回類型后置可能會(huì)是一個(gè)不錯(cuò)的選擇。任何函數(shù)的定義都能使用尾置返回。

二、尾置返回的典型場(chǎng)景

2.1 常規(guī)方式如何返回?cái)?shù)組指針

首先來(lái)看一下如何返回?cái)?shù)組指針。

因?yàn)閿?shù)組不能被拷貝,所以函數(shù)不能返回?cái)?shù)組。不過(guò),函數(shù)可以返回?cái)?shù)組的指針或應(yīng)用。雖然從語(yǔ)法上來(lái)說(shuō),想要定義一個(gè)返回?cái)?shù)組的指針或引用的函數(shù)比較繁瑣,但是有一些方法可以簡(jiǎn)化這一任務(wù),其中最直接的方法是使用類型別名。

typedef int arrT[10];   // arrT 是一個(gè)類型別名,它表示的類型是含有10個(gè)整數(shù)的數(shù)組
using arrT = int[10];   // arrT 的等價(jià)聲明
arrT* func(int i);      // func 返回一個(gè)指向含有10個(gè)整數(shù)的數(shù)組的指針

其中 arrT 是含有10個(gè)整數(shù)的數(shù)組的別名。因?yàn)槲覀儫o(wú)法返回?cái)?shù)組,所以將返回類型定義成數(shù)組的指針。因此,func 函數(shù)接收一個(gè)int實(shí)參,返回一個(gè)指向包含10個(gè)整數(shù)的數(shù)組的指針。

要想在聲明 func 時(shí)不使用類型別名,我們必須牢記被定義的名字后面數(shù)組的維度:

int arr[10];        // arr 是一個(gè)含有10個(gè)整數(shù)的數(shù)組
int *p1[10];        // p1 是一個(gè)含有10個(gè)指針的數(shù)組
int (*p2)[10];      // p2 是一個(gè)指針,它指向含有10個(gè)整數(shù)的數(shù)組

和這些聲明一樣,如果想定義一個(gè)返回?cái)?shù)組指針的函數(shù),則數(shù)組的維度必須跟在函數(shù)名字之后。然而,函數(shù)的形參列表也跟在函數(shù)名字后面且形參列表應(yīng)該先于數(shù)組的維度。因此,返回?cái)?shù)組指針的函數(shù)形式如下所示:

int arr[10];        // arr 是一個(gè)含有10個(gè)整數(shù)的數(shù)組
int *p1[10];        // p1 是一個(gè)含有10個(gè)指針的數(shù)組
int (*p2)[10];      // p2 是一個(gè)指針,它指向含有10個(gè)整數(shù)的數(shù)組

Type 表示元素類型,dimension 表示數(shù)組的大小。(*function(parameter_list))兩端的括號(hào)必須存在,如果沒(méi)有這對(duì)括號(hào),函數(shù)的返回類型將是指針的數(shù)組。

示例如下:

Type (*function(parameter_list))[dimension]

可以按照如下的順序來(lái)逐層理解該聲明的含義:

  • func(int i) 表示調(diào)用 func 函數(shù)時(shí)需要一個(gè) int 類型的實(shí)參
  • (*func(int i)) 意味著我們可以對(duì)函數(shù)調(diào)用的結(jié)果執(zhí)行解引用操作
  • (*func(int i))[10] 表示解引用 func 的調(diào)用將得到一個(gè)大小是10的數(shù)組
  • int (*func(int i))[10] 表示數(shù)組中的元素是 int 類型

2.2 使用尾置返回類型

上述傳統(tǒng)的定義形式如果不能很好的理解的話,非常容易搞錯(cuò),我們?cè)賮?lái)看看使用尾置返回類型如何定義:

int (*func(int i))[10];

當(dāng)我們把函數(shù)的返回類型放在了形參列表之后,就可以很清楚地看到func函數(shù)返回的是一個(gè)指針,并且該指針指向了含有10個(gè)整數(shù)的數(shù)組。

三、尾置返回類型的應(yīng)用

C++11 標(biāo)準(zhǔn)中位置返回類型的作用之一就是推導(dǎo)函數(shù)模板的返回類型,當(dāng)然了前提是需要用到decltype說(shuō)明符,例如:

#include <iostream>

using namespace std;

template<class T1, class T2>
auto sum(T1 t1, T2 t2) -> decltype(t1 + t2)
{
    return t1 + t2;
}

int main()
{
    auto s1 = sum(2, 3);
    cout << "sum(2, 3)=" << s1 << endl;
    cout << "s1 type: " << typeid(s1).name() << endl;

    auto s2 = sum(2.0, 3.0);
    cout << "sum(2.0, 3.0)=" << s2 << endl;
    cout << "s2 type: " << typeid(s2).name() << endl;

    return 0;
}

20230109221937

四、總結(jié)

C++11 標(biāo)準(zhǔn)引入的尾置返回類型,可以讓返回復(fù)雜類型的函數(shù)聲明更加清晰易讀。在無(wú)法使用C++14 標(biāo)準(zhǔn)的情況下,通過(guò)尾置返回類型的語(yǔ)法來(lái)推導(dǎo)函數(shù)模板的返回類型無(wú)疑是最簡(jiǎn)便的方法。

注意,在引入C++14 標(biāo)準(zhǔn)后,C++14 標(biāo)準(zhǔn)支持對(duì)返回類型聲明為auto的推導(dǎo)。

參考文獻(xiàn):

《C++ Primer第五版》

《現(xiàn)代C++語(yǔ)言核心特性解析》

到此這篇關(guān)于C++11引入的尾置返回類型的文章就介紹到這了,更多相關(guān)C++11尾置返回類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言打印某一年的日歷

    C語(yǔ)言打印某一年的日歷

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言打印某一年的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 使用C語(yǔ)言中的time函數(shù)獲取系統(tǒng)時(shí)間

    使用C語(yǔ)言中的time函數(shù)獲取系統(tǒng)時(shí)間

    在C語(yǔ)言中可以使用time函數(shù)來(lái)獲取系統(tǒng)時(shí)間,以下對(duì)time函數(shù)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • 總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    總結(jié)C/C++面試中可能會(huì)碰到的字符串指針題

    C/C++是最能體現(xiàn)程序員能力的語(yǔ)言之一,其功能強(qiáng)大,在IT行業(yè)的各個(gè)方面都有大量的應(yīng)用。下面這篇文章主要介紹了總結(jié)了在C/C++面試中可能會(huì)碰到的字符串指針題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • C語(yǔ)言如何實(shí)現(xiàn)圖片文件的復(fù)制

    C語(yǔ)言如何實(shí)現(xiàn)圖片文件的復(fù)制

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中實(shí)現(xiàn)圖片文件的復(fù)制的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Opencv圖像處理之輪廓外背景顏色改變

    Opencv圖像處理之輪廓外背景顏色改變

    這篇文章主要為大家詳細(xì)介紹了Opencv圖像處理之輪廓外背景顏色改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C語(yǔ)言實(shí)現(xiàn)冒泡排序的思路以及過(guò)程

    C語(yǔ)言實(shí)現(xiàn)冒泡排序的思路以及過(guò)程

    冒泡排序是最簡(jiǎn)單的排序方法,理解起來(lái)容易。雖然它的計(jì)算步驟比較多,不是最快的,但它是最基本的,初學(xué)者一定要掌握。本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • sqlserver,sqlite,access數(shù)據(jù)庫(kù)鏈接字符串整理

    sqlserver,sqlite,access數(shù)據(jù)庫(kù)鏈接字符串整理

    本節(jié)主要整理sqlserver,sqlite,access數(shù)據(jù)庫(kù)鏈接字符串,有需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言游戲項(xiàng)目球球大作戰(zhàn)實(shí)現(xiàn)流程

    C語(yǔ)言游戲項(xiàng)目球球大作戰(zhàn)實(shí)現(xiàn)流程

    這篇文章主要為大家詳細(xì)介紹了如何用C語(yǔ)言實(shí)現(xiàn)流行游戲球球大作戰(zhàn),文中示例代碼介紹的非常詳細(xì),如果過(guò)程中有問(wèn)題在文末還有視頻講解,感興趣的小伙伴們可以參考一下
    2022-01-01
  • GetChar緩存機(jī)制深入剖析

    GetChar緩存機(jī)制深入剖析

    以下是對(duì)GetChar緩存機(jī)制進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++中四種強(qiáng)制轉(zhuǎn)換方式的區(qū)別

    C++中四種強(qiáng)制轉(zhuǎn)換方式的區(qū)別

    在C++中,有四種不同的強(qiáng)制轉(zhuǎn)換方式,它們分別是靜態(tài)轉(zhuǎn)換、動(dòng)態(tài)轉(zhuǎn)換、常量轉(zhuǎn)換和重新解釋轉(zhuǎn)換,下面通過(guò)示例代碼講解每種轉(zhuǎn)換的區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2023-08-08

最新評(píng)論

临海市| 宁蒗| 巨野县| 景泰县| 涿州市| 台湾省| 林周县| 衢州市| 巨鹿县| 淮滨县| 集贤县| 钟山县| 潜山县| 改则县| 偏关县| 孟津县| 庄浪县| 锦州市| 宣恩县| 彭水| 仙游县| 丰原市| 嘉鱼县| 疏勒县| 沁水县| 会理县| 和政县| 若羌县| 马公市| 托里县| 吴桥县| 阿拉善左旗| 通城县| 徐闻县| 新竹市| 泽普县| 清水河县| 老河口市| 宾阳县| 思茅市| 石嘴山市|