簡體   English   中英

static_cast int要引用int嗎?

[英]static_cast int to reference to int?

是否允許:

int x = 1;
int r1 = static_cast<int&>(x);
int r2 = static_cast<int&&>(x)

如果是,那么這些演員表的含義是什么?

這個代碼引起了問題:

int x = 1;
int y = 2;
std::swap(x, y); // uses int temp = std::move(x);

static_cast int要引用int嗎? 可以嗎

是。 這是允許的。

如果是,那么這些演員表的含義是什么?

強制轉換為相同類型的左值引用幾乎是沒有意義的,因為它自己使用的變量已經是左值。 但是,它會影響decltype推導,如Ben Voigt的示例所示 如果您需要向下轉換對base的引用(與int不相關),則強制轉換為對另一種類型的引用很有用。

強制轉換為右值引用非常有用,因為它會將表達式的類型更改為xvalue。 這允許從變量移動。 實際上,這就是std::move所做的。 但是,這與int無關緊要。

static_cast<int&>(x);

在表達式中使用x因為x已經是int&類型,所以不執行任何操作。

static_cast<int&&>(x);

將l值的x轉換為r值。 這正是std::moveT&&用於實現移動語義的功能。

std::swap使用std::move是因為沒有任何缺點,而且可能不會提高性能。 移動ctor / assignments的效率至少應與復制ctor / assignments一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM