簡體   English   中英

為什么靜態const char * const變量是左值時可綁定到右值引用參數?

[英]Why is a static const char * const variable bindable to an rvalue reference parameter when it is an lvalue?

給定static const char * const x = "test"; 以及帶有簽名void DoSomething(std::string && value)的函數,為什么將此左值綁定到參數是合法的,就像DoSomething(x);

我的印象是字符串文字是一個char數組,但是它會衰減為指針類型,並且仍然是左值。 我只是困惑為什么這是合法的。

當帶有右值引用參數的函數希望獲得該參數數據的所有權時,這如何與PE文件的只讀段中的內存一起使用? 我了解內存並未物理移動,但似乎會引起問題。

std::stringconst char *不同。 當使用無法直接綁定的其他類型的表達式初始化引用時,將創建一個臨時類型,該臨時類型具有正確的引用類型。 臨時文件由提供的初始化程序初始化,並且引用直接綁定到臨時文件。 右值引用可以綁定到臨時對象。

然后,該功能可以獲取臨時數據的所有權。 字符串文字不變(因為構造函數string::string(const char *)不會更改文字,而是獲取其內容的副本)。

暫無
暫無

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

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