![](/img/trans.png)
[英]error C2440: 'initializing' : cannot convert from 'const mynamespace::mytype*' to 'const T*'
[英]const forwarding reference gives error C2440: 'initializing': cannot convert from 'const std::string' to 'const std::string &&'
以下給出了編譯器錯誤:
#include <string>
const std::string& get_name();
int main(){
auto&& name1 = get_name();//should bind to whatever
const auto& name2 = get_name();//also ok
const auto&& name3 = get_name();//<-not ok, why ?
return 0;
}
神螺栓鏈接: https://godbolt.org/z/l6IQQ7
如果我使用const auto&
它會編譯 - 但這不會綁定到值。 auto&&
將綁定到任何東西,這樣自然也能正常工作。 但是,在這種情況下const auto&&
不綁定背后的邏輯是什么? 我知道auto&&
會保留 constness - 但是有沒有辦法使const
顯式並且同時與引用/值無關?
動機:
對於函數內部的“正常編程工作”等,如果能夠說出類似的話會很棒: “我不在乎它是一個值還是一個參考 - 但我不會為函數的 rest 更改它” 。
考慮到當前的語言,這應該是可能的。
相關問題: 為什么添加`const`會使通用引用成為右值
對於函數內部的“正常編程工作”等,如果能夠說如下的話會很棒:“我不在乎它是一個值還是一個參考 - 但我不會為函數的 rest 更改它”。
您已經有了激勵您的解決方案:使用const auto&
。 const auto&
將綁定到:
所以你得到了你需要的一切。 是的,它與 const rvalue ref 不同,但如果你只使用它,那並不重要,因為無論如何你都無法從中移動,因為它是 const。
最后一點: auto&&
將永遠是一個參考。 它是一個帶有扣除的轉發引用,但您的最終變量將始終是一個引用(右值引用或左值引用,但絕不是“值”)。 也許那是/是一個誤解?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.