【发布时间】:2017-03-26 16:05:27
【问题描述】:
#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 是一个比 S1 更好的转换序列 标准转换序列S2 if
[...]
— S1 和 S2 是引用绑定 (8.5.3),两者都没有引用 声明的非静态成员函数的隐式对象参数 没有引用限定符,并且 S1 将右值引用绑定到 rvalue S2 绑定一个左值引用
但事实并非如此,因为 S1 将右值引用绑定到 左值(“abc”,const char[4] 的左值)。 我在哪里可以找到描述,选择第二个重载?
附:我指的是 C++14 Standard 而不是 C++11,因为我知道 C++11 中有一些缺陷报告,与右值引用绑定相关联。
【问题讨论】:
标签: c++ c++14 rvalue-reference overload-resolution