我目前正試圖通過這個post瞭解複製和交換習慣用法。發佈的答案具有下面的代碼在它通過臨時作爲參考
class dumb_array
{
public:
// ...
friend void swap(dumb_array& first, dumb_array& second) // nothrow
{
// enable ADL (not necessary in our case, but good practice)
using std::swap;
// by swapping the members of two classes,
// the two classes are effectively swapped
swap(first.mSize, second.mSize);
swap(first.mArray, second.mArray);
}
// move constructor
dumb_array(dumb_array&& other)
: dumb_array() // initialize via default constructor, C++11 only
{
swap(*this, other); //<------Question about this statement
}
// ...
};
我注意到,作者使用這個聲明
swap(*this, other);
other
是一個臨時的或正在被作爲該方法交換一個引用傳遞一個rvalue
。我不確定是否可以通過引用傳遞一個右值。 爲了測試這一點,我試着這樣做但是下面沒有工作,直到我的參數轉換爲const reference
void myfunct(std::string& f)
{
std::cout << "Hello";
}
int main()
{
myfunct(std::string("dsdsd"));
}
我的問題是如何能夠other
被臨時被引用在swap(*this, other);
傳遞而myfunct(std::string("dsdsd"));
不能是通過參考傳遞。
我認爲你需要了解什麼是右值引用是:http://stackoverflow.com/a/5481588/4342498 – NathanOliver 2015-03-31 19:08:28
swap(* this,other);'是錯誤的。它必須是'swap(* this,std :: move(other));'(其他是一個命名變量) – 2015-03-31 19:12:03
@DieterLücking在這種情況下,交換方法不會工作,因爲它需要一個引用,並且你傳遞一個臨時的。如果它是一個不變的參考,它只會按照你的建議工作。請糾正我,如果我錯了 – Rajeshwar 2015-03-31 19:13:40