1

C++11でベクトルメンバーオブジェクトを初期化する最良の方法は何ですか? コンパイラはコピーを最適化しますか、fooそれともbarより効率的になりますか?

#include <vector>
using namespace std;

// C++11 style
struct foo
{
        vector<int> vec = vector<int>(256);
};

// traditional
struct bar
{
        bar() : vec(256) {}
        vector<int> vec;
};
4

1 に答える 1

1

C++11 では、おそらくそれらの間に大きな違いはありません。たとえば、foo は大きなベクトルをコピーしません。の右側=は右辺値でmove、左側に d されます。唯一の違いは、 内の 0 要素ベクトルの作成 (および迅速な削除) ですfoo。しかし、それには時間がかかりません。

ただし、C++11 と C++03 の両方で、最適化 (「省略」) により foo の代入をスキップできます。したがって、両方の標準で非常に効率的です。

于 2013-11-07T00:06:29.323 に答える