gpt4 book ai didi

c++ - 右值引用还是左值?

转载 作者:行者123 更新时间:2023-12-03 06:49:36 24 4
gpt4 key购买 nike

我有一个类似性质的问题,就像 5 年前发布的一样:
Why are rvalues references variables not rvalue?
我主要关心的是为什么我可以这样做:

int&& k = 3;
k++;
但我不能这样做:
(static_cast<int&&>(3))++;
我总是将右值引用解释为左值,因为右值引用变量是左值。但显然情况并非如此。有人可以向我解释为什么 (static_cast<int&&>(3))++;结果 using rvalue as lvalue ?

最佳答案

混淆可能是由 r-value 之间的差异引起的和 r-value reference .前者是仅适用于表达式的值类别,而后者是适用于变量的类型(从技术上讲,它需要是某种类型的 r 值引用,例如对 int 的 r 值引用)。
因此,您显示的片段之间的差异实际上与变量的类型无关,而是与表达式的值类别有关。后缀 operator++无论操作数的类型如何,都要求操作数的值类别为左值。
k++ , 表达式 k是一个左值(粗略地说,它有一个名称),这是它的值类别。变量的类型 k是一个 r 值引用,但这很好。
(static_cast<int&&>(3))++ , 表达式 static_cast<int&&>(3)是一个 r 值(它没有名称),这是它的值类别。不分类型static_cast<int&&> (即 int ),值类别是错误的,因此您会收到错误消息。
请注意错误信息 using rvalue as lvalue是指正在使用的表达式的值类别。它与变量的类型无关。

关于c++ - 右值引用还是左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64088934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com