为什么可以分配给类类型的右值?

2024-01-12

为什么这段代码可以编译?我认为构造函数返回的右值不位于内存中,因此不能用作左值。

class Y {
public :
    explicit Y(size_t num = 0) {}
};

int main() {
    Y(1) = Y(0); // WHAT?!?
    return 0;
}

根据参见 12.8 [class.copy] 第 18 段,将合成赋值运算符声明为其中之一(如果它可以合成并且未声明为删除):

  • Y& Y::operator=(Y const&)
  • Y& Y::operator=(Y&) ()

也就是说,就像任何其他没有专门声明的成员函数一样引用限定符 https://stackoverflow.com/questions/8610571/what-is-rvalue-reference-for-this它适用于右值。

如果您想防止在赋值的左侧出现临时对象,您需要相应地声明它:

class Y {
public :
    explicit Y(std::size_t num = 0);
    Y& operator= (Y const&) & = default;
};

标准使用名称引用限定符为了&之前= default。相关提案是N2439 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm。不知道哪里有好的描述引用限定符。有一些信息位于这个问题 https://stackoverflow.com/q/8610571/1120273.

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

为什么可以分配给类类型的右值? 的相关文章

随机推荐

  • rtrim 函数不适用于结尾 h 字母[重复]

    这个问题在这里已经有答案了 file refinish php folder rtrim file php echo folder refinis 哪里结束h 我尝试了其他一些结尾字母 没关系 rtrim 不会删除您在第二个参数中指定的字符
  • x86-64 汇编的性能优化 - 对齐和分支预测

    我目前正在编写一些 C99 标准库字符串函数的高度优化版本 例如strlen memset 等 使用带有 SSE 2 指令的 x86 64 汇编 到目前为止 我已经在性能方面取得了出色的结果 但当我尝试进一步优化时 有时会出现奇怪的行为 例
  • Shapeless 中 Nat 类型的限制

    在无形中 Nat 类型代表了一种在类型级别对自然数进行编码的方法 例如 这用于固定大小的列表 您甚至可以在类型级别上进行计算 例如附加一个列表N列表中的元素K元素并返回一个在编译时已知的列表N K元素 Is this representat
  • JPA中@Table注解有什么用?

    使用这些注释的全部目的是独立于数据库提供者 而不是重新生成 JAR 存档 如果我硬核 Table name myDatabase myTableName 我一开始就不明白使用 hibernate 的意义 如果我决定切换到不同的数据库提供商
  • 如何在for循环(Python)中写入txt文件?

    作为一个简单的练习 我试图将最多 500 个素数打印到一个文本文件中 但我不确定如何正确地将写入代码插入到 for 循环中 当前输出的只是最后一个素数 在本例中为 499 for num in range 2 500 prime True
  • Matplotlib Line3DCollection 用于随时间变化的颜色

    我正在尝试绘制随时间演变的 3D 线轨迹 并且我希望颜色发生变化以显示时间的流逝 例如从浅蓝色到深蓝色 然而 明显缺乏使用 matplotlib 的教程Line3DCollection 这是最接近的 https stackoverflow
  • 对 WebService 的 jQuery 调用返回“无传输”错误

    我有以下网络服务 WebMethod public string HelloWorld return Hello World 它是库存标准 没有对类装饰器进行任何更改 我有这个 jQuery 方法 var webMethod http lo
  • SimpleDateFormat 格式错误的值

    以下代码 SimpleDateFormat sdf new SimpleDateFormat MM dd System out println sdf format new Date 1293253200 12 25 2010 05 00
  • 实施工厂模式的正确方法是什么?

    我只是想知道这是否是在 PHP 中创建对象和实现工厂模式的正确方法 我知道我们有工厂方法模式和抽象工厂模式 但是我们有像下面这样的模式吗http noondreams com shared data pages images Factory
  • 如何返回 Mono,其中响应实体可以是两种不同类型

    我是 Spring Webflux Reactor Core 的新手 正在尝试执行以下功能 调用 userservice LoginWebApp 如果返回用户 则返回类型为 User 的ResponseEntity 如果为空 则返回 Str
  • 有没有一种更简单的方法可以删除字符第一次出现之前的所有内容?

    正如标题所说 这确实更出于兴趣 我的文件名格式为1347020478 Workbook1 12 19 19 csv 我想要做的是将时间戳从文件名的开头移开并返回其他所有内容 所以Workbook1 12 19 19 csv 我有以下代码可以
  • VLC 和 MJPEG 解码器流式传输(标头无效)

    我正在制作一个包含视频流的 WinRT 应用程序 现在我以 VLC 作为流媒体服务器和 MJPEGDecoder 库结束 http mjpeg codeplex com http mjpeg codeplex com 在客户端上解码视频 但
  • 如何编写批处理文件来设置类路径并执行java程序

    我的一些java程序需要很多jar文件才能执行 为了执行此操作 我可能必须将所有这些 jar 文件添加到环境变量的类路径变量中 否则每次打开新的 cmd 提示符时都必须在命令提示符处手动设置类路径 我不想在环境变量中的类路径变量中添加所有
  • 虚函数破坏私有访问

    我最近看到这篇文章IBM site http publib boulder ibm com infocenter comphelp v8v101 index jsp topic 2Fcom ibm xlcpp8a doc 2Flanguag
  • 从字典数组中删除键值的重复项

    我正在执行 Facebook API 请求 以返回特定 Facebook 群组中的所有专辑名称 我返回一个包含 3 个键 值的字典数组 其中一个是映射到专辑名称的键 name 以及键 id 和 created time 唯一的问题是 由于某
  • iphone 模拟器(10.3) 时间未根据 mac OS (10.13) 中的时区显示

    I have update my mac os to 10 13 beta version now it showing GMT time for my old simulator with ios version 10 3 its not
  • 在 Rails 4 中的 has_and_belongs_to_many 关系中使用 uniq

    我正在尝试对一个实施独特的约束has and belongs to many像这样的关系 class User has and belongs to many foos uniq true end 因为我只想要独一无二foos当我打电话时u
  • Woocommerce:覆盖现有电子邮件所需的登录信息。将订单添加到用户帐户

    Woocommerce 设置 访客结帐已禁用 启用结帐时创建帐户 自动生成用户名和密码 如果用户已注册 但未登录 结帐错误 您的电子邮件地址已注册一个帐户 请登录 我如何覆盖它 完成订单 并将订单与现有帐户绑定 提示用户下次登录以便更快结帐
  • Minio 安装在 Traefik 后面

    我有以前的版本 去年的 minio远远落后traefik and on portainer没有任何问题 我四天前尝试升级到新版本 但从那时起它就一直在走下坡路 我收到登录页面 但它不接受凭据 错误 code 500 detailedMess
  • 为什么可以分配给类类型的右值?

    为什么这段代码可以编译 我认为构造函数返回的右值不位于内存中 因此不能用作左值 class Y public explicit Y size t num 0 int main Y 1 Y 0 WHAT return 0 根据参见 12 8