C 模板右值引用推導的問題?

時間 2021-06-07 07:55:58

1樓:

情況是這樣的:

int i = 10;

foo(i);

首先進行 name lookup 找到了 2 個 foo, 然後進行模板引數的歸約.

第 1 個是 foo(T&&) [with T = int&]

第 2 個是 foo(const T&) [with T = int]

之後進行過載決議, 優先順序從`完美匹配`, `型別提公升`, `型別轉換`依次降低.

> 3) A standard conversion sequence S1 is better than a standard conversion sequence S2 if

> e) or, if not that, both S1 and S2 are binding to a reference parameters only different in top-level cv-qualification, and S1's type is less cv-qualified than S2's.

由此可見, 沒有 cv修飾符的更優.

(其實只看最後一句就行了。

參考: Overload resolution

C 可修改右值問題?

c 11引入的 限制符直接不允許把this繫結到右值 左值上 可參見 primer 5 13.6 對於題外話析構的流程是先執行析構函式體再執行隱式的析構階段所謂隱式析構階段上邊已經說得很清楚了 再題外話樓主該換書了 邱昊宇 來自標準文件 3.10 5 An lvalue for an object ...

c 為什麼要搞個引用岀來,特別是右值引用,感覺破壞了語法的簡潔和條理,拷貝乙個指標不是很好嗎?

王旭競 一 這樣說吧。對於已存在的物理資源來說,只有兩個狀態 可變 不可變。對於使用者來說,需要給物理資源命名,才能使用。對於名來說,有兩個狀態 有 資源 無 資源 所以綜合起來,對於給物理資源命名這件事,需要三個語意來操作 別名 二者唯一 複製 二者各一 移動 一有一無 二 邏輯上來說,別名 複製...

C 模板引用引數傳遞的問題,為什麼沒有優先匹配基類的引用型別?

少年之翼 對於函式過載,標準定義了複雜的判定規則 在多引數的情況下可能會複雜到肉眼難以分辨的程度 認為 優先匹配基類的引用引數 是太天真了。簡單理解就是乙個匹配要明顯優於其他才算作成功,否則就會被認為優勢太小不足以區分,故編譯不過。運算子的版本能夠通過 運算子也是函式呼叫,需要經過函式過載決議選定 ...