c++ - 语句内的等号/赋值运算符

标签 c++ c

前几天我在浏览 github 时发现了这段 C++ 代码。

order[i]= order[i]+order[r]-(order[r]=order[i]);

为什么一行代码中有2个等号?我以前从未见过这个。

最佳答案

赋值运算符= returns an LVALUE, meaning a value can be further assigned to it .

此外,这通常是糟糕的编码,因为它很丑陋。作者最好在多行上进行单独的分配,因为它更容易阅读,在实现时不易出错(作为可读性的扩展),优化器在任何一种情况下都可能生成类似的代码,等等。此外,这种代码经常会导致一个常见的重复问题:sequence points, and why this code is horrible.

编辑:And as others have pointed out, it invokes UB. Axe it.

关于c++ - 语句内的等号/赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579989/

相关文章:

c++ - 错误 C2535 : 'ManagedArray::ManagedArray(void)'

c++ - 如何在 OpenCV 中读取 ".jpg"图像序列?

c++ - std::array 编译时间扣除

c++ - 找不到 ahadmin.h 文件

C 编译器忽略 'static' 的结构声明

c - 在 pty 模式下使用 libssh 的 stderr

c - 从 xml 文件中提取字符串并将其粘贴到文本文件中

c++ - 调用虚函数时崩溃

c - ~(uint32_t) 是什么意思?

c - C 中的分配错误(函数或代码)和奇怪的行为