【问题标题】:What does operator= returns in c++?operator= 在 C++ 中返回什么?
【发布时间】:2023-01-06 00:10:29
【问题描述】:

operator= 是否在 C++ 中返回某些内容?

所以,你可以那样做 int a, b, c; int d = a = b = c = 1;

并且,所有变量都将等于 1 ?它适用于所有操作系统吗?

【问题讨论】:

  • 是的,所有变量都将等于 1。
  • 自 1960 年代左右以来,大多数语言在它们存在的每个操作系统上都以相同的方式工作。
  • 听起来你可以使用good C++ book
  • 另外,不要只添加标签。 “仅当您的问题涉及使用 Linux API 或特定于 Linux 的行为进行编程时才使用此标记,而不仅仅是因为您碰巧在 Linux 上运行代码。”和“编写特定于 Microsoft Windows 操作系统的软件:API、行为等”。
  • 运算符= 通过将右侧表达式分配给左侧变量来工作。由左部分 = 和右部分组成的整个表达式然后返回表达式右部分的值。您陈述的表达式是有效的,并且会将 1 分配给所有四个变量,即 abcd

标签: c++ variables


【解决方案1】:

对于内置类型,赋值运算符的应用(除了写入新值的副作用之外)求值为对赋值左侧的引用。所以int d = a = b = c = 1;相当于

c = 1; // assignment
b = c; // assignment
a = b; // assignment
int d = a; // initialization

对于问题中的普通(非易失性)变量,这将导致所有变量都持有1。如果链的中间涉及任何 volatile 左值,您将从所述 volatile 左值读取,而不是简单地使用前面链式赋值中的值。


对于自定义operator=()的类型,取决于operator=()body的返回类型和返回表达式。按照惯例,用户定义的operator=() 遵循与内置类型相同的规则......但一些特殊类型会偏离惯例。

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 1970-01-01
    • 2013-11-14
    • 2016-09-30
    • 2021-02-12
    • 2018-05-29
    • 2017-12-24
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多