c++ - 这个 C++ 编译器优化的名称是什么(在自身实例上调用对象自己的构造函数),它是如何工作的?
问题描述
我正在尝试学习 C++ 中的资源管理,在我的学习中我遇到了一个有趣的优化。基本上,当使用复制构造函数初始化堆栈上的对象时,其中对象是右值对象(它是右值吗?),而不是调用构造函数然后调用移动构造函数,编译器只是调用原始对象的构造函数。
Object c(Object(1)); // This is the same as Object c(1);
Object c(Object(Object(Object(Object(Object(1)))))); // This is also the same as Object c(1);
Expected flow:
1. Object(1) calls the constructor and creates a nameless Object that will be removed as soon as it's created.
2. c notices this is an rvalue, and calls the move constructor.
3. Destructor for Object(1) is called.
Actual flow:
1. c(1) is called.
这很聪明,但是.. 怎么样?这个技巧背后的机制是什么?即使 Object 的构造函数接受指针和许多参数,这仍然有效。
解决方案
推荐阅读
- ssl - 如何确定在 OpenLdap 中注册了什么版本的 TLS 安全协议
- kotlin - 如何在托管代码中调试本机 OpenGL 崩溃?
- masonry - 元素之间具有相同水平空间的砌体
- c# - 被测函数“foo”多次调用外部函数“bar(baz)”=> 如何针对每次调用专门修改“baz”的返回值?
- laravel - Laravel Nova:登录表单是 HTTP 而不是 HTTPS
- c# - 怎么会有匹配的扩展方法和实例方法?
- visual-studio-code - 全新安装后使用命令 + L 的 VSCODE 行选择不起作用
- php - 如何从对象中获取特定的键及其值
- powershell - Powershell:重定向stderr会导致异常
- python - 删除 json 对象,如果值匹配