#include <iostream>
using namespace std;
void func(int (&ref)[6]) { cout << "#1" << endl; }
void func(int * &&ref) { cout << "#2" << endl; }
int main()
{
int arr[6];
func(arr); // g++(5.4): ambiguous, clang++(3.8): #2, vc++(19.11): #1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这两个函数都是完全匹配.以下是标准的引用:
标准转换序列S1是比标准转换序列S2更好的转换序列
...
S1和S2是引用绑定(8.5.3),并且都不引用没有ref-qualifier声明的非静态成员函数的隐式对象参数,S1将rvalue引用绑定到rvalue,S2绑定左值引用.
这不是意味着第二个更好吗?
更新:
有一个相关的问题.以下代码是它的简化版本.
#include <iostream>
using namespace std;
void func(int *&) { cout << "#1" << endl; }
void func(int *&&) { cout << "#2" << endl; }
int main()
{
int arr[6]; …Run Code Online (Sandbox Code Playgroud)