右值引用,就是那些只能出於賦值號右側的變數(目前我的理解就是沒有名稱的物件或值),然後對它們的引用;
移動構造,就是利用現成的物件來構造自己的新物件,而不是重新構造物件然後進行賦值操作(拷貝構造)。拷貝構造的特點就是利用已有的物件,將這個物件的值複製到新的物件中,這裡其實是產生了兩個物件,對吧!然而在移植構造中,新的物件就是原物件,為什麼要這麼做呢?這樣就有利於函式傳值的效率的提公升。
看**吧!!
先看拷貝構造的消費:
#pragma once
#include
#include
class student
student(const student& student)
~student()
private:
std::string name;
int age;
};#include
#include
#include "head.h"
using
namespace
std;
student test()
void main()
我們來看看結果吧:
在這裡,可以看到,在物件進行賦值的期間有兩次物件的釋放,一次是在函式裡面,區域性物件的釋放;另外一次就是在賦值過程中,釋放臨時物件。所以這樣做的代價還是很大的。
//接下來看看移動構造
#pragma once
#include
#include
class student
student(const student& student)
student(const student&& student)
~student()
private:
std::string name;
int age;
};#include
#include
#include "head.h"
using
namespace
std;
student test()
void main()
在這裡加了一句用於移動構造的**:
接下來再來看看上面的結果:
ps: 我這兩次執行的時間間隔不超過30s,所以可以忽略系統出現任務阻塞的原因。
從這兩次的執行結果中可以看出移動構造的效果確實要比拷貝構造的效果要好的多。當然前提還是你的右值的物件從此以後不再使用,否則系統會給你很多驚喜的。好了,就這樣了。
C 11 右值引用以及std move
int和int 是什麼?都是型別。int是整數型別,int 則是整數引用型別。相同int 也是乙個型別。兩個引號 是c 11提出的乙個新的引用型別。記住,這是乙個新的型別。默念 10次吧。假設你記住這個新型別,那麼非常多疑問都能迎刃而解。而且對 effective modern c 說到的void ...
C 11右值 右值引用以及move語義
1 字面常量 1 3,2 等 2 臨時物件 返回非引用型別的函式,算術 關係 位以及後置遞增 遞減原算符 注意 左值引用的函式,賦值 下標 解引用和前置遞增 遞減運算子返回都為左值 3 無名物件 4 一般函式的返回值也為右值 class myclass myclass 右值 1 右值引用只能繫結到臨...
C 11中的右值引用以及std move
看了很多篇文章,現在終於搞懂了c 中的右值以及std move 左值和右值最重要的區別就是右值其實是乙個臨時的變數 在c 11中,也為右值引用增加了新語法,即 比如如下 void testfunc int i void testfunc int i intmain 此時輸出為 right value...