c++ - 按值返回 std::array
问题描述
一个简单的问题,但我无法在 SO、cppreference.com 和类似网站上找到答案。
像这样按价值返回是否合法std::array
?
std::array<int, 3> f() {
return std::array<int, 3> {1, 2, 3};
}
如果它是合法的,那么按值将其传递给函数也是合法的,对吧?
解决方案
是的,这是合法的。这是使用它而不是 C 样式数组的优点之一,它不会衰减。它会做你期望它做的事情,明智地复制数组元素,在这种情况下它只会调用 RVO。
正如评论中已经说过的那样,您的第二个版本并不安全。它会构造一个临时的并通过 ref 返回它,这将导致你最终得到一个悬空的 r ref。
推荐阅读
- node.js - 通过 webpack 运行脚本后无法运行脚本。(错误:无法定位全局对象)
- opc-ua - 增加的通道令牌 ID 使会话无法使用:如何在 Eclipse Milo 客户端中处理它?
- javascript - 当 JSON Payload 具有不同格式时,使用 Javascript 或 jQuery if else 语句使用不同的变量
- seo - 在区域性 shopify 商店中正确使用 hreflang / canonical 标签
- mysql - 带有 gradle 的数据库(Liquibase) - 无法翻译 POM.xml
- javascript - Gmail 附件到 Google 表格问题
- r - 累积和:在R中处理栅格数据中的NA像素
- django - django 管理员访问权限:edit_user 与分配访问权限
- algorithm - 如何计算多个接送目的地之间的最短路径
- javascript - 使用 jQuery 和 AJAX 更新 SQL 时出现问题