请考虑以下示例(出于假设目的):
#include <iostream>
void f(int *&&b)
{
++b;
std::cout << *b;
}
int main()
{
int a[] = { 1,2,3,4 };
f(a);
}
据我所知,数组a
衰减为int *
,该数组是临时的,因此是一个右值,int *&&b
应该愉快地绑定到它并延长其寿命f
的功能。如果我run this with C++14 (gcc 6.3)并且结果为2
,就会发生这种情况。但是在VS2017中,出现错误:
错误C2664'无效f(int * &&)':无法将参数1从'int [4]'为'int * &&'
如果我使用std::move
来强制xvalue f(std::move(a));
,它也可以在VS中使用。在这种情况下,我需要使用std::move
还是VS中的某种错误?