C ++ 11高效的矢量成员初始化?

时间:2013-11-06 23:58:09

标签: c++11 initialization stdvector

在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;
};

1 个答案:

答案 0 :(得分:1)

在C ++ 11中,它们之间可能没有太大区别。例如,foo不会复制大型矢量。 =的右侧是左值,左侧是move d。唯一的区别是foo内的0元素向量的创建(和快速删除)。但这不会占用时间。

但是,C ++ 11和C ++ 03都允许优化('elision')跳过foo中的赋值。因此,它们在两种标准中都非常有效。