c++ - 这个表达式是 xvalue 吗?
问题描述
C++ 标准对“xvalues”(N4762 § 7.2.1.4)有以下说明:
一个表达式是一个 xvalue,如果它是:
- 。. .
- 一个类成员访问表达式,指定一个非引用类型的非静态数据成员,其中对象表达式是一个 xvalue
考虑以下代码片段(使用 Boost 打印表达式的类型):
#include <iostream>
#include <boost/type_index.hpp>
using boost::typeindex::type_id_with_cvr;
struct X {
int var;
} x;
int main()
{
auto extended_type = type_id_with_cvr<decltype( std::move(x).var )>();
std::cout << extended_type.pretty_name() << std::endl;
}
我的问题是关于表达式std::move(x).var
:
根据标准中的文本,我希望表达式是一个 xvalue,但输出是int
,而不是int &&
。
我在这里想念什么?
解决方案
我的问题是关于表达式:
std::move(x).var
根据标准中的文字,我希望表达式是一个 xvalue,
这是。
但输出是
int
,不是int &&
那是因为decltype
有两种形式。它可以提供有关如何声明名称的信息,也可以提供有关表达式的类型和类别的信息。
由于std::move(x).var
是会员访问,你得到前者。要获得后者,请使用decltype((std::move(x).var))
(带双括号)。
推荐阅读
- java - 在 Spring JPA 中使用 BigInteger 作为主键给出 - 列“id”的列说明符不正确
- javascript - 文件操作耗时较长,收到“正在运行[文件,保存,删除创建参与者”消息
- r - R:改变R中线条的颜色
- javascript - 总是在函数表达式上使用函数声明有什么缺点吗?
- awk - PROCINFO 如何在特定记录上显示 FS 信息?
- python - BokehUserWarning:ColumnDataSource 的列必须具有相同的长度
- sparse-matrix - 来自 Pytrilinos 的 LAPACK 用于最小二乘
- php - PHP:如果在数字前使用 0,则 ksort 返回错误结果
- javascript - sapper/svelte 中的预加载功能不运行
- pytorch - CPU/GPU 设备之间的 Torch 分布式广播和减少