Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.3 右值引用中的错误描述 #275

Open
Mq-b opened this issue May 8, 2024 · 1 comment
Open

3.3 右值引用中的错误描述 #275

Mq-b opened this issue May 8, 2024 · 1 comment

Comments

@Mq-b
Copy link
Contributor

Mq-b commented May 8, 2024

  • 文件路径:book/zh-cn/03-runtime.md

web 位置。

原文:

左值 (lvalue, left value),顾名思义就是赋值符号左边的值。准确来说, 左值是表达式(不一定是赋值表达式)后依然存在的持久对象。

右值 (rvalue, right value),右边的值,是指表达式结束后就不再存在的临时对象。

而 C++11 中为了引入强大的右值引用,将右值的概念进行了进一步的划分,分为:纯右值、将亡值。

纯右值 (prvalue, pure rvalue),纯粹的右值,要么是纯粹的字面量,例如 10, true; 要么是求值结果相当于字面量或匿名临时对象,例如 1+2。非引用返回的临时变量、运算表达式产生的临时变量、 原始字面量、Lambda 表达式都属于纯右值。

这整段描述都存在问题,误导且无视了一个根本的问题:值类别是表达式的性质。或许不能算完全无视,因为提到了:“准确来说, 左值是表达式

每个 C++ 表达式(带有操作数的操作符、字面量、变量名等)可按照两种独立的特性加以辨别:类型和值类别 (value category)。每个表达式都具有某种非引用类型,且每个表达式只属于三种基本值类别中的一种纯右值 (prvalue)亡值 (xvalue)左值 (lvalue)

更不用提对于左值、右值、纯右值这三种值类别的错误定义。

@changkun
Copy link
Owner

Thanks and PR welcome

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants