c++ - C和C++中前缀自增运算符的区别
问题描述
我刚刚阅读了有关前缀自增运算符的 C 参考资料,并意识到前缀自增运算符的结果不是左值,但令人惊讶的是它在 C++ 中是左值。之后我读了这个答案,解释了为什么它是左值,但我不明白:
(第 3 行):["] 看起来是这样,因此您可以获取其地址或分配给引用。[."]
一个例子如下:
int i; extern void f (int* p); f (&++i); /* Would be illegal C, but C programmers havent missed this feature */ ...
那么允许这样做有什么好处呢?这样做的唯一目的是i
在全球区域增加是非法的吗?如果这是我认为这是对 C 中无法/难以解决的缺陷的补救措施的唯一原因,或者为了可读性,可能应该重写程序,对吧?
顺便说一句,我不明白为什么 lvalue 也被称为“定位器值”,我读过这个 - 第 4 行,但定位器对我来说是模糊的。什么是定位器,它是指针吗?
编辑:为了您宝贵的时间阅读 wth is locator value,这是我自制的 backronym:
- lvalue:位置值,你知道它的位置。
- rvalue:读取值,只能读取值。
如果出了什么问题,不要怪我。
解决方案
在 C++ 中,赋予左值的前缀++
实际上是非常自然的。
因为 C++ 有运算符重载。对于大多数可能复杂类型的迭代器,前缀++
返回迭代器本身的左值。
因此,对于泛型编程,将基本类型作为特例是不方便的。
例如;
auto &iter = ++old_iter;
如果指针的前缀增量给出右值,则不起作用。
推荐阅读
- mysql - 如何使用 URL.Query().Get() 使用 Golang 填写 SELECT 语句
- github - 如何将所有 GitHub 机密信息放入 env 变量中以供 Actions 访问(在我的情况下为 powershell)?
- c# - 在 CMD 中执行命令并访问 git 本地服务器
- jsp - 尝试在我的网络浏览器中运行 JSP 文件时遇到错误
- python - 以pythonic方式检查交织字符串
- python - 何时假设使用 dash m 并避免 __init__?
- reactjs - 如何在 React.useReducer bailout 上运行代码
- php - 使用 Mailcacther 捕获 gmail 帐户电子邮件
- python - 如何检查元素是否存在于另一个 3 维数组中?
- reactjs - 有没有办法在 Vitejs 中使用 PostCSS for React 项目来混淆 TailwindCSS 类名?