Skip to content
New issue

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

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

Already on GitHub? # 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

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

No branches or pull requests

2 participants