c 把左值賦給左值和把右值賦給左值有什麼區別?

時間 2021-05-29 23:25:48

1樓:劉雲賓

後者會呼叫移動賦值運算子,前者只會呼叫普通複製運算子,即,後者 y 的值會改變,當然是在有移動賦值運算子的情況下

下面的程式,會測試兩者的不同

#include

#include

#include

int mainstd::string y = "123456";

std::string x;

x = y;

std::cout << "x = " << x << std::endl;

std::cout << "y = " << y << std::endlstd::string y = "123456";

std::string x;

x = std::move(y);

std::cout << "x = " << x << std::endl;

std::cout << "y = " << y << std::endl;

} return 0;}

2樓:d41d8c

對於內建賦值運算子,沒什麼區別。

對於過載的operator=,運算元不同可能導致過載決議(overload resolution)過程不同。這和普通的函式呼叫一樣。

c 中如何理解「左值」和 「右值」 左值是不是儲存在stack上,而右值是儲存在heap上?

AlseinX 從字面意思理解,左值和右值是指出現在賦值等號的左邊和右邊的值。右值只能出現在等號右邊,而左值只能出現在等號的左邊。左值是指變數或具有變數語義的表示式,是記憶體空間中 無論是堆還是棧 分配出來的一段用於儲存值的空間。而右值是乙個具體的,可以被計算 被得出 被儲存的資料。例如,有乙個in...

左值和右值有沒有準確的定義

Byron 首先,在C 11中所有的值必屬於左值 右值兩者之一。在C 11中可以取位址的 有名字的就是左值,反之,不能取位址的 沒有名字的就是右值 將亡值expiring value或純右值pure Rvalue 這裡的有名字是值得注意的,由於Move semantic perfect forwar...

關於C 左值和右值區別有沒有什麼簡單明瞭的規則可以一眼辨別?

caelum 其實吧,變數都是位址。變數裡面的資料還是存放在其它空間。如果儲存空間中的值有指標 變數 指向它,那麼這個變數就是乙個左值。如果這個空間的資料沒有變數指向它,那麼它就是乙個右值。大概是這樣吧。有沒特例我也不清楚。不過說實話,我也有點懵。比如 int a 10 如果反彙編的話,這個10是立...