c++ - C/C++ 赋值运算符实现的底层细节。它返回什么?

标签 c++ c assignment-operator

我是 C++ 世界的新手(也是 C)。并且不知道它的所有细节。但是有一件事真的让我很困扰。 它是这样的结构: while (a=b) {...} 。据我所知,这个魔法之所以有效,是因为 C 和 C++ 中的赋值运算符会返回一些东西。 所以问题是:它返回什么?这是一个文档化的东西吗?它在 C 和 C++ 中的工作方式是否相同。关于赋值运算符的底层细节及其在 C 和 C++ 中的实现(如果有差异)将不胜感激!

我希望这个问题不要被关闭,因为我无法从低层次的角度找到关于这个主题的全面解释和好的 Material ,更何况。

最佳答案

对于 C++ 中的内置类型,评估赋值表达式会产生一个左值,它是赋值表达式的左侧。分配在结果可以使用之前排序,因此当结果转换为右值时,您将获得新分配的值:

int a, b=5;
int &c = (a=b);
assert(&c==&a);
b=10;
assert(10==(a=b));

C 几乎但不完全相同。 C 中赋值表达式的结果是一个右值,与新分配给赋值左侧的值相同。

int *c = &(a=b); // not legal in C because you can only take the address of lvalues.

通常,如果赋值的结果被完全使用,它会被用作右值(例如,a=b=c),因此 C++ 和 C 之间的这种差异在很大程度上没有被注意到。

关于c++ - C/C++ 赋值运算符实现的底层细节。它返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697643/

相关文章:

c++ - 将程序参数复制到以空格分隔的 std::string

c++ - while循环困惑

c - C中使用 float 的基本快速排序算法

c - Freeswitch 阻塞

C++ 多值初始化

c++ - 重载赋值运算符与提供隐式构造函数

c++ - JNI - 将类实例发送到 C++

c++ - c++ 数据结构建议

c - Typedef 结构定义,将指向所述结构的指针作为其元素

python - 在 x = 1 中,x 和 1 都是对象吗?