1. 程式人生 > >圖說函式模板右值引用引數(T&&)型別推導規則(C++11)

圖說函式模板右值引用引數(T&&)型別推導規則(C++11)

見下圖:

規律總結:

只要我們傳遞一個基本型別是A的左值,那麼,傳遞後,T的型別就是A&,形參在函式體中的型別就是A&。

只要我們傳遞一個基本型別是A的右值,那麼,傳遞後,T的型別就是A,形參在函式體中的型別就是A&&。

另外,模板引數型別推導是保留cv限定符(cv-qualifier,const和volatile限定符的統稱)的,具體例子見《完美轉發和標準庫forward函式》。

①這裡指形參在函式體中的實際型別

②函式返回的不具名左值引用依舊是左值,例如,上面程式碼中,Get(3)=5;是可以的。

③具名的右值引用是左值,不具名的右值引用是右值。

④這裡,“基本型別是A”意思是:A,A&,A&&及A型別的字面值的基本型別都是A。

相關推薦

圖說函式模板引用引數(T&&)型別推導規則C++11

見下圖: 規律總結: 只要我們傳遞一個基本型別是A④的左值,那麼,傳遞後,T的型別就是A&,形參在函式體中的型別就是A&。 只要我們傳遞一個基本型別是A的右值,那麼,傳遞後,T的型別就是A,形參在函式體中的型別就是A&&。 另外,模板引數型別推導是保留cv限定符(cv-

引用摺疊和引用引數

通常我們不能將一個右值引用繫結到一個左值上。但是,C++語言在正常的繫結規則之外定義了兩個例外規則: 第一個例外規則影響右值引用引數的推斷如何進行。當我們將一個左值傳遞給函式的右值引用引數,且此右值引用指向模板型別引數(如T&&)時,編譯器推斷

《隨筆十四》—— C++中的 “ 委託建構函式 C++11

目錄 委託建構函式 委託建構函式 ● 一個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程, 在委託建構函式內,成員初始值列表只有一個唯一的入口, 就是類名本身(就是同類的其他建構函式的類名)。 類名後面的引數列表必須與類中另外一個建構函式匹配。 c

string中常用函式總結四(append和assignC++11

append(新增字元(串)) (1)basic_string& append(const basic_string& __str); //在字串末尾新增字串str (2) basic_string& append(const basic_st

C++11引用、完美轉發foward、可變模板引數例項

#include <iostream> using namespace std; struct A{ int x; A(int _x):x(_x){ co

c++11:物件移動 & 引用 & 移動建構函式

一、概述 c++ 11 新標準中最主要的特徵是可以移動而非拷貝物件的能力。很多情況下,物件拷貝後就會立即被銷燬。 在這些情況下,移動而非拷貝物件會大幅度提升效能。 在舊 C++ 標準中,沒有直接的方法移動物件。因此,即使不必要拷貝物件的情況下,我們也不得不拷貝。如果物件本身要求

C++11 新特性之引用和轉移建構函式

問題背景 #include <iostream> usingnamespace std;   vector<int> doubleValues (const vector<int>& v)   {  

c++ const 成員函式 & 臨時變數 & 引用 & move

const 成員函式 我們知道,在C++中,若一個變數宣告為const型別,則試圖修改該變數的值的操作都被視編譯錯誤。例如: const char blank = 'a'; blank = 'b'; // 錯誤 面向物件程式設計中,為了體

引用與移動建構函式的一點理解

說明:右值引用是c++11中的新特性,本來c++中是有一個左值引用的,引入右值引用後,多了很多概念,再看prime的時候,就覺得似乎讓c++更繁瑣了。偶然在知乎上看到這個話題,於是有了一點理解,遂記錄於此。知乎連結 大象與冰箱 我們還是從大象與冰箱的

C++引用—臨時變數、引用引數和const引用和左引用

如果實參與引用引數不匹配,C++將生成臨時變數。如果引用引數是const,則編譯器在下面兩種情況下生成臨時變數:          實參型別是正確的,但不是左值          實參型別不正確,但可以轉換為正確的型別 Double refcube(const

c++11-17 模板核心知識—— 區分萬能引用(universal references)和引用

- [引子](#引子) - [如何區分](#如何區分) - [模板引數](#模板引數) - [const disqualify universal reference](#const-disqualify-universal-reference) - [auto宣告](#auto宣告) ##

C++11引用

右值引用 語法 factor htm 類型 har start 移動 hand 右值引用是C++11 引入的新特性。它解決了兩類問題:實現移動語義和完美轉發。本文大絕大部分內容,來自於文章:http://kuring.me/post/cpp

C++ 引用與移動操作

銷毀 帶來 臨時對象 類型 左值引用 都是 獲得 留下 c++11 右值引用和移動操作是C++11提出的新概念,通過這些操作,可以降低拷貝操作帶來的消耗。先來簡單介紹一下左值和右值。 左值一般指的是一個對象,或者說是一個持久的值,例如賦值的返回值、下標操作、解引用以及前置遞

第15課 引用2_std::move和移動語義

可見 div 強制轉換 let 技術分享 移動語義 ptr align 講解 1. std::move (1)std::move的原型 template<typename T> typename remove_reference<T>::type&

引用引用

開發 左值 優化 語法 表達 3.2 右值 實現 規則 1、左值和右值的概念 左值是可以放在賦值號左邊可以被賦值的值;左值必須要在內存中有實體; 右值當在賦值號右邊取出值賦給其他變量的值;右值可以在內存也可以在CPU寄存器。

C++左引用引用

分配內存 右值 markdown type 提高 指向 區分 基本語法 down 1.左值和右值概念: 左值是可以放在賦值號左邊可以被賦值的值:左值就是指在表達式使用完之後仍存在的對象(存儲空間); 右值當在賦值號右邊去除值賦給其他變量的值:右值可以在內存也可以在CPU寄存

從4行代碼看引用

ESS 重載函數 內存 auto 復制代碼 默認 ins lba var 看到的文章,覺得很不錯,保留一下,不知是不是原文的地址:https://www.cnblogs.com/qicosmos/p/4283455.html 從4行代碼看右值引用 概述   右值引用的概

c++引用以及使用

什麽 函數的參數 .html 顯式 pan 但是 cout 表達式 信息 前幾天看了一篇文章《4行代碼看看右值引用》 覺得寫得不錯,但是覺得右值引用的內容還有很多可以去挖掘學習,所以總結了一下,希望能對右值引用有一個更加深層次的認識 一、幾個基本概念 1.1左值和右值 左值

[轉載][C++]C++11引用詳解

找到 延長 引用 () 字面量 別名 賦值 例子 左值 我之前以為左值就是等號左邊的值,右值就是等號右邊的值。 我 太天真 ?_? 原文地址:https://blog.csdn.net/hyman_yx/article/details/52044632 (侵刪 ------

C++11引用與移動構造

添加 oooo 返回對象 oat 值引用 apc 定義 tco pri ----------------------------右值引用--------------------------------- 右值定義:   通俗來講,賦值號左邊的就是左值,賦值號右邊的就