惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
B
Blog RSS Feed
美团技术团队
博客园 - 【当耐特】
C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Vercel News
Vercel News
P
Proofpoint News Feed
IT之家
IT之家
I
InfoQ
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - double64

MSVC 特有的 pragma C# 字符串转换 C# 遍历删除空文件夹 MFC 单文档无边框最大化全屏 MFC 单文档去掉菜单栏 MFC 对话框去边框最大化全屏 C++ 动态数组 C++ 安全的拷贝赋值(Copy-and-Swap 惯用法) C++ 基类派生类的 static_cast 和 dynamic_cast 转换的简单测试 visual studio 的 snippet 代码片段模板样式 Windows 右键管理官方小程序Autoruns C++ 结合 enum 按位与或组合检测枚举项 std::unique_ptr 当删除器类型为 无状态的时构造可以不用传删除器示例 两个用来写 CLI - Command-Line Interface 的命令解析库 enum class 类型转换 int 微软输入法中如何输出当前时间 音程知识 C++ 模板引用参数的各种情况 英语 12 种时态 Qt 手动添加 Q_OBJECT 需要添加的地方 C# WPF 绑定 ObservableObject 实现 INotifyPropertyChanged 接口 C++ 标准库 copy_if C++ lambda 和 bind 何时优先使用 Windows 下的 Qt 中 min max 函数冲突 C++ std::unique_ptr 和 std::shared_ptr 都支持自定义删除器(deleter) C++ 智能指针和动态数组 std::vector 插入另一个 vector 的范围元素 Qt tableWidget QTableWidget 常用一些属性设置 C++ 内部类(嵌套类)是可以访问外部类的私有保护成员的 C++ 宏展开顺序
C++ RVO 或 NRVO 可能触发的条件
double64 · 2025-08-14 · via 博客园 - double64

1. NRVO(Named RVO) —— 命名返回值优化

MyClass create() {
    MyClass obj(10);
    // ... 处理
    return obj;  // NRVO 可能发生
}

触发条件:

  1. obj 的类型与函数返回类型相同(或可隐式转换)
  2. 函数只有一个返回路径(或多条路径返回同一个变量)
  3. 编译器认为安全且可优化
  4. ⚠️ NRVO 不保证被应用,是“可选优化”。

2. RVO(匿名对象) —— 直接返回临时对象

MyClass create() {
    return MyClass(42);  // 返回临时对象
}

或者

return {}; // 使用聚合初始化
  • 返回类成员变量通常不会触发
  • 多返回路径,若不同路径返的不是同一对象,可能不会触发。

C++17 起:保证 RVO(Guaranteed Copy Elision)
从 C++17 开始,这种情况下必须省略拷贝/移动,称为“强制返回值优化”。