首页 > 解决方案 > 按值返回 std::array

问题描述

一个简单的问题,但我无法在 SO、cppreference.com 和类似网站上找到答案。

像这样按价值返回是否合法std::array

std::array<int, 3> f() {
   return std::array<int, 3> {1, 2, 3};
}

如果它是合法的,那么按值将其传递给函数也是合法的,对吧?

标签: c++arraysc++11

解决方案


是的,这是合法的。这是使用它而不是 C 样式数组的优点之一,它不会衰减。它会做你期望它做的事情,明智地复制数组元素,在这种情况下它只会调用 RVO。

正如评论中已经说过的那样,您的第二个版本并不安全。它会构造一个临时的并通过 ref 返回它,这将导致你最终得到一个悬空的 r ref。


推荐阅读