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関連するインスタンスのコピーや移動は 1 つもありません。

于 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 に答える