在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;
};
答案 0 :(得分:1)
在C ++ 11中,它们之间可能没有太大区别。例如,foo不会复制大型矢量。 =
的右侧是左值,左侧是move
d。唯一的区别是foo
内的0元素向量的创建(和快速删除)。但这不会占用时间。
但是,C ++ 11和C ++ 03都允许优化('elision')跳过foo中的赋值。因此,它们在两种标准中都非常有效。