一个简单的问题,但我无法找到答案,既不是在SO上,也不是在cppreference.com和类似网站上.
std::array按价值返回是否合法?
std::array<int, 3> f() {
return std::array<int, 3> {1, 2, 3};
}
Run Code Online (Sandbox Code Playgroud)
如果它是合法的,那么按价值将它传递给函数也是合法的,对吗?
是的,这是合法的.这是在C风格阵列上使用它的优点之一,它不会衰减.它会做你期望它做的事情,明智地复制数组元素,在这种情况下,它只会调用RVO.
正如评论中已经说过的那样,你的第二个版本并不安全.它将构造一个临时的并通过ref返回它,这将导致你最终得到一个悬空r ref.