c++ - 为什么 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 中的某种错误?
解决方案
您的程序看起来格式正确,并且被 GCC 和 Clang 接受。
它似乎是 Visual Studio 编译器中的一个错误,直到编译器版本 19.28 才出现,最终在编译器版本 19.29 中得到修复。演示: https ://gcc.godbolt.org/z/KbhGfhPbG
推荐阅读
- java - 如何在Android上对同一代码设置两个权限
- arrays - 组合数组以获取哈希数组
- c# - IndexOutOfRangeException:尝试访问 GameObject 数组时,数组索引超出范围?
- postgresql - ORDER BY 会影响多个 WHERE 条件吗?
- android - Unity VR 场景到 2D 场景
- c - 如何从C中的单个文件中提取多个字符串
- java - Spring cloud netflix eureka server - 启动时出现tomcat错误
- android - 如何在 MVP 中测试读取/更新文件?
- php - php从新数组追加到json数组
- java - 如何以编程方式在顶部和底部的垂直线性布局中设置一个视图?