C++ 中重载赋值运算符

2024-02-09

据我了解,重载operator=时,返回值应该是非常量引用。


A& A::operator=( const A& )
{
    // check for self-assignment, do assignment

    return *this;
}

在以下情况下允许调用非常量成员函数是非常量的:


( a = b ).f();

但为什么它应该返回一个引用呢?如果返回值未声明为引用(假设按值返回),在什么情况下会出现问题?

假设复制构造函数已正确实现。


不返回引用是一种资源浪费,并且会产生奇怪的设计。为什么要为运营商的所有用户创建一个副本,即使几乎所有用户都会丢弃该值?

a = b; // huh, why does this create an unnecessary copy?

此外,这会让你的班级的用户感到惊讶,因为内置的赋值运算符不会同样复制

int &a = (some_int = 0); // works
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中重载赋值运算符 的相关文章

  • 如何在C++中生成非常大的随机数

    我想使用 C 生成 0 2 64 范围内的非常大的随机数 我已经使用了 rand 函数 但它没有生成非常大的数字 有人可以帮忙吗 使用c 11 使用标准c 11的随机库 http en cppreference com w cpp nume
  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • 采用 std::vector 或 std::array 的模板函数

    我有一个函数 当前接受 2 个向量 其中可以包含任何普通的旧数据 template
  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • 在 WCF 上重用我的 PagedList 对象

    问题 我有一个自定义集合PagedList
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • Visual Studio Code 语法突出显示不起作用

    我使用 Visual Studio Code VSC 作为我的 IDE 我的计算机刚刚更新到 Catalina 10 15 2 19C57 自更新以来 VSCode 不再突出显示语法错误 我的扩展似乎正在工作 并且它可以识别我的 minic
  • Android RadioButton 允许检查多个

    我有一个大约有 30 个单选按钮的单选组 我查看了堆栈溢出 发现了一些关于意外允许检查多个单选按钮的帖子 他们是不在无线电组中 或者其 ID 有问题 https stackoverflow com questions 8265034 and
  • 无法整理和解析 R 文件(Linux 上的 R)

    我的 R 安装完全出了问题 我似乎无法再在 CRAN 上安装许多标准包了 由于某种原因 无法处理 Rd 文件 举个例子 当我尝试时 R gt install packages pbkrtest dep TRUE clean TRUE 我明白
  • 使用 Nuxt 部署到 Heroku 时获取 API 路由 404

    我不知道这里发生了什么事 我的应用程序在开发中工作得很好 但是当我推送到 Heroku 时 每当我尝试使用 Postman 或使用 Axios 访问任何路由时 它都会抛出 404 错误 我在这里做错了什么 这是我的index js cons
  • 即使在某些设备上授予所有必需的权限后,调用 WifiManager.startLocalOnlyHotspot() 也会引发 SecurityException

    我正在开发一个文件共享应用程序 我需要通过调用 WifiManager startLocalOnlyHotspot 以编程方式打开设备的仅本地热点 根据此页面上的 android 文档 https developer android com
  • 在CSS中,当我滚动滚动条时,
  • 的背景颜色消失了
  • HTML 代码如下 div ol li class a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa li li class b bbbbbbbbbbbbbbbbbbbbb
  • 使用 PointToScreen 在 wpf 中查找控件的位置

    我正在尝试在主窗口内找到用户控件的相对坐标 我尝试使用 Control PointToScreen 方法 但没有成功 每次我这样做时 我都会收到一个异常 System InvalidOperationException 此视觉对象未连接到P
  • 使用 -rpath 和 $ORIGIN 链接时查找失败

    我正在尝试学习如何使用 rpathGCC 链接器 ld 中的选项 ORIGIN 我正在尝试我能想到的最简单的例子 见下文 我读到的所有链接似乎都说我做得正确 但是 当我运行可执行文件时 它无法找到共享对象 除非我从内部运行它 ORIGIN
  • 使用截然不同的需要了解的信息集对产品进行建模并将它们链接到订单项?

    我目前正在一个网站上工作 该网站销售各种类型的定制产品 我已经得到了通用的标准购物车模式 订单有许多 LineItems LineItems 有一个产品 但我遇到了一些症结 假设我们的一个产品是一个球 而我们的一个产品是一盒蜡笔 当人们创建
  • 返回类型与 Object.getClass() 不兼容

    该代码是在 eclipse 上导入 webservice 文件时生成的 但是 我在编译时看到了这个错误 返回类型与Object getClass 有什么想法可以解决这个问题吗 public java lang String getClass
  • Firestore 模拟器 REST API 身份验证

    我正在寻找 Firestore 模拟器 REST API 处理未经身份验证的请求的方式的预期行为的一些确认 因为我认为我可能发现了一些可能的不一致之处 我一直在使用 Postman 的个人项目来使用 Firestore Emulator R
  • 实体框架 6.1 更新记录的子集

    我有一个仅封装的视图模型some数据库模型属性 视图模型包含的这些属性是我想要更新的唯一属性 我希望其他财产能够保持其价值 在我的研究过程中我发现this https stackoverflow com a 15339512 2015959
  • mediaelement.js - 在第一个视频末尾播放另一个视频

    由克罗克 Video forEveryone 推荐 我希望能够在第一个视频结束后自动播放第二个视频 然后在第二个视频结束后显示静态图像 经过一段设定的时间后 循环回到第一个视频 Thanks function audio video med
  • 启动带有视频的 Youtube 应用程序

    我有一个带有 UIButton 的应用程序 我希望 当我单击 iPhone 启动 Youtube 应用程序的按钮时 我的视频可以直接开始播放 我尝试了以下代码 UIApplication sharedApplication openURL
  • 如何查找表中长列的长度

    我在名为 Files 的表中有一个名为 FileSize 的 LONG 列 为了实现这一目标 我做了以下工作 我编写了这个 PL SQL 脚本来查找大小 declare long var LONG 0 begin dbms output p
  • 有状态 Rsocket 应用程序

    在我的项目中 我想让多个客户端连接到一个服务 我正在使用 java Rsocket 实现 该服务应该为每个客户端维护一个状态 现在 我可以通过某种标识符来管理客户端 这个选项我已经实现了 但我不想使用字符串手动管理会话 所以另一个想法是通过
  • 在 C# 中使用委托

    在 C 语言和 NET 框架中 你能帮助我理解委托吗 我试图检查一些代码 发现收到的结果出乎我的意料 这里是 class Program public static int I 0 static Func
  • 为什么元组联合期望“never”作为“.includes()”参数?

    type Word foo bar baz const schema foo foo as const bar bar as const baX bar baz as const const testFn schemaKey keyof t
  • Rails:无效的单表继承类型错误

    因此 我正在努力使用现有数据库迁移这个 php 站点 但我无法将其更改为 Rails 这里有张桌子 Quotes有一列名为type 每当我尝试创建此模型并设置类型时 它都会告诉我以下错误 ActiveRecord SubclassNotFo
  • C++ 中重载赋值运算符

    据我了解 重载operator 时 返回值应该是非常量引用 A A operator const A check for self assignment do assignment return this 在以下情况下允许调用非常量成员函数