#include <iostream>
#include <string>
void fnc (const std::string&)
{
std::cout<<1;
}
void fnc (std::string&&)
{
std::cout<<2;
}
int main()
{
fnc ("abc");
}
所有的編譯器選擇std::string&&
版本的fnc
,這是合乎邏輯的,因爲臨時std::string
爲參考結合創建的,但我找不到,它在哪裏描述在C++ 14標準中。 我發現有一個段(3.2):重載決策
- 標準轉換序列S1比 標準轉換序列S2更好的轉換序列如果
[...]
- S1和S2是參考綁定(8.5.3),並且都不參考 非靜態成員函數的隱式對象參數,其被聲明爲 而沒有ref限定符,並且S1將右值引用綁定到右值 和S2結合左值參考
但它不是這種情況下,因爲S1結合一個rvalue參照一個左值(「ABC」,左值常量字符的[4])。 我在哪裏可以找到描述,選擇第二個過載?
P.S.我指向C++ 14標準而不是C++ 11,因爲我知道,在C++ 11中有一些缺陷報告與rvalue引用綁定關聯。
這是一個數組到指針的轉換,而不是l到r。 –
@ T.C。是的,你是對的,糾正。 – vsoftco