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。唯一的区别是在foo. 但这不会占用任何时间。

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

于 2013-11-07T00:06:29.323 回答