首页 > 解决方案 > 为什么 VS 无法将右值引用绑定到指针?

问题描述

考虑以下示例(出于假设目的):

#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。如果我使用 C++14 (gcc 6.3) 运行它,结果是2. 然而,在 VS2017 中,我收到一个错误:

错误 C2664 'void f(int *&&)':无法将参数 1 从 'int [4]' 转换为 'int *&&'

如果我使用std::move强制 xvaluef(std::move(a));它也适用于 VS。在这种情况下我需要使用std::move还是这是 VS 中的某种错误?

标签: c++visual-c++rvalue-reference

解决方案


您的程序看起来格式正确,并且被 GCC 和 Clang 接受。

它似乎是 Visual Studio 编译器中的一个错误,直到编译器版本 19.28 才出现,最终在编译器版本 19.29 中得到修复。演示: https ://gcc.godbolt.org/z/KbhGfhPbG


推荐阅读