c++ - 赋值运算符的返回类型是什么?

标签 c++ reference assignment-operator dereference lvalue

我刚刚开始使用 C++。我对赋值和取消引用运算符的返回类型有点困惑。我正在关注 C++ Primer 一书。在各种情况下,作者说赋值运算符的返回类型是对左手操作数的类型的引用,但后来他说返回类型是左手操作数的类型。我已经提到了 C++11 Standard Sec。 5.17,其中返回类型被描述为“左值引用左操作数”。

同样,我不知道取消引用是返回指向对象还是对该对象的引用。

这些语句是否等效?如果是这样,那怎么办?任何解释将不胜感激。

最佳答案

标准正确定义了赋值运算符的返回类型。 实际上,赋值操作本身并不依赖于返回值——这就是为什么返回类型不容易理解的原因。

返回类型对于链接操作很重要。 考虑以下结构:a = b = c;。这应该等于 a = (b = c),即 c 应该分配到 bb进入 a。将其重写为 a.operator=(b.operator=(c))。为了使 a 的赋值能够正常工作,b.operator=(c) 的返回类型必须引用内部赋值结果(它也适用于复制但这只是不必要的开销)。

解引用运算符的返回类型取决于你的内部逻辑,以适合你需要的方式定义它。

关于c++ - 赋值运算符的返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292892/

相关文章:

c++ - 简单的链表,带有完整的五法则

c++ - 使用 Crypto++ 解密时原始文本末尾的车库冗余字符

c++ - Qt 应用程序是否需要最终用户提供额外的库?喜欢 C# 和 .NET Framework?

c++ - 在 OpenGL C++ 中同时使用 glOrtho 和 gluPerspective

arrays - 如何在 Scala 中获得 Ponter/Reference 语义

c++ - 如何使operator=像operator+一样接受参数的导数?

c++ - 是否可以在使用 D3DXCreateTextureFromFileInMemoryEx 创建的一个位置中的两个纹理之间逐步进行 alpha 混合?

MySQL - 将 INT(11) UNSIGNED 替换为 FK 到唯一的 INT(11) UNSIGNED 有什么好处吗?

c++ - 为什么要向 C++ 添加引用? (从历史的角度)

c++ - 使用 const 成员放置 new 和类的赋值