14

涉及什么机制,如果在返回可从初始值设定项列表构造的类型时,我没有指定要返回的类型,如:

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

代替

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

如果我在未指定类型的情况下返回初始化程序列表,是否会涉及任何性能损失?我实际上是在返回一个数组,它被转换成一个std::array

4

2 回答 2

18

不涉及性能惩罚。返回值的构造等价于

std::array<int, 3> x = { 1, 2, 3 };

甚至没有涉及一个std::array实例的单个副本或移动。

于 2013-06-21T16:53:26.640 回答
2

该机制只是一个构造函数:

struct X {};

struct Y {
    Y(X);
};

Y f() {
    X x;
    return x;
}
于 2013-06-21T16:57:05.960 回答