C++11 標準新特性

來源:互聯網
上載者:User

新特性的目的

右值引用 (Rvalue Referene) 是 C++ 新標準 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它 實現了轉移語義 (Move Sementics) 和精確傳遞 (Perfect Forwarding)。它的主要目的有兩個方面:

消除兩個對象互動時不必要的對象拷貝,節省運算儲存資源,提高效率。

能夠更簡潔明確地定義泛型函數。

左值與右值的定義

C++( 包括 C) 中所有的運算式和變數要麼是左值,要麼是右值。通俗的 左值的定義就是非臨時對象,那些可以在多條語句中使用的對象。所有的變數都滿足這個定義,在多條 代碼中都可以使用,都是左值。右值是指臨時的對象,它們只在當前的語句中有效。請看下列樣本 :

簡單的指派陳述式

如:int i = 0;

在這條語句中,i 是左值,0 是臨時值,就 是右值。在下面的代碼中,i 可以被引用,0 就不可以了。立即數都是右值。

右值也可以出現在賦 值運算式的左邊,但是不能作為賦值的對象,因為右值只在當前語句有效,賦值沒有意義。

如 :((i>0) ? i : j) = 1;

在這個例子中,0 作為右值出現在了”=”的左邊。但是賦值對象 是 i 或者 j,都是左值。

在 C++11 之前,右值是不能被引用的,最大限度就是用常量引用綁 定一個右值,如 :

const int &a = 1;

在這種情況下,右值不能被修改的。但是 實際上右值是可以被修改的,如 :

T().set().get();

T 是一個類,set 是一個函數為 T 中的一個變數賦值,get 用來取出這個變數的值。在這句中,T() 產生一個臨時對象,就是右值, set() 修改了變數的值,也就修改了這個右值。

既然右值可以被修改,那麼就可以實現右值引 用。右值引用能夠方便地解決實際工程中的問題,實現非常有吸引力的解決方案。

左值和右 值的文法符號

左值的聲明符號為”&”, 為了和左值區分,右值的聲明符號為”&&”。

樣本 程式 :

void process_value(int& i) {  std::cout << "LValue processed: " << i << std::endl; }     void process_value(int&& i) {  std::cout << "RValue processed: " << i << std::endl; }     int main() {  int a = 0;  process_value(a);  process_value(1); }

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。