c++ - C++中的赋值运算符

标签 c++

让我们假设我有一些类 A 并从它派生 B: 我想为 B 编写 operator=(假设我的 A 类中有 operator=) 正确的做法:

B& B::operator=(const B& rhs)
{
if(this == &rhs) return *this;
((A&) *this) = rhs; //<-question
//some other options
return *this
}

如果我写有什么区别

((A) *this) = rhs;

提前致谢

最佳答案

您的第二个代码将只复制 *thisA 部分(切片)到一个临时变量中,分配它,然后丢弃它。不是很有帮助。

我会将该行写成:

A::operator=(rhs);

这很清楚它正在调用基类版本。

在您实际上不知道基类是什么,以及它是否有一个 operator= 成员或友元之类的模板情况下,强制转换和赋值可能会更好。

在那种情况下:

A* basethis = this;
*basethis = rhs;

更易于阅读和理解。

关于c++ - C++中的赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847916/

相关文章:

c++ - 添加图像到 QQuickView

c++ - 使用 copy 和 back_inserter 将 vector 附加到自身时的错误结果

c++ - 仅当某个编译时表达式为真时才尝试 {.... } catch(..)

C++:在类堆栈中使用双端队列成员函数

c++ - QT 插槽 : Pointer to Member Function error

c++ - 六边形网格算法

c++ - 这是利用尾调用递归遍历链表的最佳方式吗?

c++ - 为什么我的A *搜索算法实现无法正常工作?

c++ - 在 std::vector 中查找索引

c++ - 使用 Bool 函数确定 End