【发布时间】:2019-02-19 01:37:12
【问题描述】:
一个简单的问题,但我无法在 SO、cppreference.com 和类似网站上找到答案。
像这样按值返回std::array 是否合法?
std::array<int, 3> f() {
return std::array<int, 3> {1, 2, 3};
}
如果合法,那么按值传递给函数也是合法的,对吧?
【问题讨论】:
-
为什么不合法?这是其引入的核心目的之一。
-
鉴于 std::array 是具有默认构造函数的(模板)对象 ....
-
如正确回答,您的第一个版本很好,但请注意:您的替代版本不好。它将编译,但它返回一个对立即被销毁的临时对象的引用。
-
@VioletGiraffe 差不多。唯一的例外是您有时可能希望返回对传入的按引用参数的引用,其中参数可以引用临时对象。