成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析Visual Studio右值引用

開(kāi)發(fā) 后端
這里介紹正是拷貝(Copy)和移動(dòng)(Move)的差別,使得Visual Studio右值引用成為C++0x中最激動(dòng)人心的新特性之一。

在向大家詳細(xì)介紹右值引用之前,首先讓大家了解下C++0x,然后全面介紹Visual Studio右值引用,希望對(duì)大家有用。作為最重要的一項(xiàng)語(yǔ)言特性,Visual Studio右值引用(rvalue references)被引入到 C++0x中。我們可以通過(guò)操作符“&&”來(lái)聲明一個(gè)Visual Studio右值引用,原先在C++中使用“&”操作符聲明的引用現(xiàn)在被稱(chēng)為左值引用。

  1. int a;  
  2. int& aa_lvref = a;    
  3. // 左值引用  
  4.  
  5. int b;  
  6. int&& bb_rvref = b;    
  7. // 右值應(yīng)用 

左值引用和Visual Studio右值引用的表現(xiàn)行為基本一致,它們唯一的差別就是Visual Studio右值引用可以綁定到一個(gè)臨時(shí)對(duì)象(右值)上,而左值引用不可以。例如:

  1. int& a_lvref = int();  
  2. // error C2440: 'initializing' : cannot convert from 'int' to 'int &'      
  3. int&& b_rvref = int();  
  4. // OK! 

在***行代碼中,我們將一個(gè)臨時(shí)對(duì)象int()綁定到一個(gè)左值引用,將產(chǎn)生一個(gè)編譯錯(cuò)誤。而在第二行中,我們將臨時(shí)對(duì)象綁定到Visual Studio右值引用,就可以順利通過(guò)編譯。

右值是無(wú)名的數(shù)據(jù),例如函數(shù)的返回值一般說(shuō)來(lái)就是右值。當(dāng)對(duì)右值進(jìn)行操作的時(shí)候,右值本身往往沒(méi)有必要保留,因此在某些情況下可以直接“移動(dòng)”之。通過(guò)Visual Studio右值引用,程序可以明確的區(qū)分出傳入的參數(shù)是否為右值,從而避免了不必要的拷貝,程序的效率也就得到了提高。我們考慮一個(gè)簡(jiǎn)單的數(shù)據(jù)交換的小程序,從中來(lái)體會(huì)Visual Studio右值引用所帶來(lái)的效率提升。我們可以寫(xiě)一個(gè)函數(shù)swap來(lái)實(shí)現(xiàn)兩個(gè)變量值的交換:

  1. template <class T> swap(T& a, T& b)  
  2. {  
  3. T tmp(a);   
  4. // tmp對(duì)象創(chuàng)建后,我們就擁有了a的兩份拷貝  
  5. a = b;  
  6. // 現(xiàn)在我們擁有b的兩份拷貝  
  7. b = tmp;  
  8. // 現(xiàn)在我們擁有a的兩份拷貝  

在這段代碼中,雖然我們只是為了進(jìn)行簡(jiǎn)單的數(shù)據(jù)交換,但是卻執(zhí)行了多次對(duì)象拷貝。這些對(duì)象的拷貝操作,特別是當(dāng)這些對(duì)象比較大的時(shí)候,無(wú)疑會(huì)影響程序的效率。

那么,如果使用Visual Studio右值引用如何實(shí)現(xiàn)呢?

  1. // RValueRef.cpp : Defines the entry point for the console application.  
  2. //  
  3.  
  4. #include "stdafx.h"  
  5.  
  6. template <class T> 
  7. T&& move(T&& a)  
  8. {  
  9. return a;  
  10. }  
  11.  
  12. template <class T> void swap(T& a, T& b)  
  13. {  
  14. T tmp(move(a)); 
  15. // 對(duì)象a被移動(dòng)到對(duì)象tmp,a被清空  
  16. a = move(b);
  17. // 對(duì)象b被移動(dòng)到對(duì)象a,b被清空  
  18. b = move(tmp);
  19. // 對(duì)象tmp被移動(dòng)到對(duì)象b  
  20. }  
  21.  
  22. int _tmain(int argc, _TCHAR* argv[])  
  23. {  
  24. int a = 1;  
  25. int b = 2;  
  26. swap(a, b);  
  27.  
  28.  return 0;  

#t#在這段重新實(shí)現(xiàn)的代碼中,我們使用了一個(gè)move()函數(shù)來(lái)代替對(duì)象的賦值操作符“=”,move()只是簡(jiǎn)單地接受一個(gè)Visual Studio右值引用或者左值引用作為參數(shù),然后直接返回相應(yīng)對(duì)象的Visual Studio右值引用。這一過(guò)程不會(huì)產(chǎn)生拷貝(Copy)操作,而只會(huì)將源對(duì)象移動(dòng)(Move)到目標(biāo)對(duì)象。

正是拷貝(Copy)和移動(dòng)(Move)的差別,使得Visual Studio右值引用成為C++0x中最激動(dòng)人心的新特性之一。從實(shí)踐角度講,它能夠***是解決C++中長(zhǎng)久以來(lái)為人所詬病的臨時(shí)對(duì)象的效率問(wèn)題。從語(yǔ)言本身講,它健全了C++中的引用類(lèi)型在左值右值方面的缺陷。從庫(kù)設(shè)計(jì)者的角度講,它給庫(kù)設(shè)計(jì)者又帶來(lái)了一把利器。而對(duì)于廣大的庫(kù)使用者而言,不動(dòng)一兵一卒便能夠獲得“免費(fèi)的”效率提升。

責(zé)任編輯:佚名 來(lái)源: NET130
相關(guān)推薦

2009-11-23 17:12:20

Visual Stud

2012-02-13 10:18:42

C++ 11

2009-11-06 13:25:35

Visual Stud

2009-11-06 11:16:17

Visual Stud

2009-12-16 16:39:01

Visual Stud

2024-06-04 12:32:42

.NET開(kāi)發(fā)內(nèi)存泄漏

2009-11-23 16:17:02

Visual Stud

2022-07-26 00:36:06

C#C++函數(shù)

2009-11-09 16:49:53

Visual Stud

2011-03-17 08:54:13

2025-06-06 07:35:06

C++表達(dá)式右值

2009-12-16 14:09:14

Visual Stud

2012-04-25 11:04:13

Visual Stud

2023-09-05 07:32:22

vscode開(kāi)源故障

2013-11-14 01:09:35

微軟Visual StudVisual Stud

2009-12-01 18:50:57

Visual Stud

2009-12-02 09:43:38

Visual Stud

2019-09-19 08:00:00

Visual StudVisual Stud編程語(yǔ)言

2024-02-27 12:42:38

開(kāi)發(fā)前端

2009-11-24 10:49:45

Visual Stud
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 99re在线观看 | 欧美日韩高清免费 | 在线成人www免费观看视频 | 亚洲国产精品久久久 | 天天综合永久 | 中文字幕在线观 | 99精品国自产在线观看 | 欧美不卡 | 欧美精品在线播放 | 精品久久香蕉国产线看观看亚洲 | 欧美激情精品久久久久久变态 | 国产成人一区二区三区 | 成人中文字幕在线观看 | 精品久久国产 | 亚洲色图在线观看 | 久久综合成人精品亚洲另类欧美 | 日韩高清在线 | 中文字幕一区在线观看视频 | 久久久久国产精品一区二区 | 99精品一区二区三区 | 日韩欧美中文字幕在线观看 | 91社区在线高清 | 中文字幕国产视频 | 羞羞视频免费在线 | 国产美女精品 | 在线观看亚洲欧美 | 激情一区二区三区 | 国产一区二区 | 久久久久久国产精品三区 | 91精品国产91综合久久蜜臀 | 美女视频黄色的 | 国产免费观看一级国产 | 狠狠色狠狠色综合日日92 | 成人精品一区二区三区中文字幕 | 国户精品久久久久久久久久久不卡 | 2020天天操 | 激情av| aaaaaa大片免费看最大的 | av一二三区 | 黄网站免费在线 | 资源首页二三区 |