精简版:
如果我的对象包含一个 std::vector,是否适用于按值返回该对象与按值返回向量相同的经验法则?
这在 C++11 中是否发生了变化,我理解“保证”按值返回向量很快?
长版:
我有一个包含 std::vector 的小型包装类。
class gf255_poly
{
public:
// ... Lots of polynomial methods
protected:
std::vector<unsigned char> p;
};
我想从某些函数返回这个类的实例,例如:
// Performs polynomial addition in GF(2^8).
gf255_poly gf255_poly_add(const gf255_poly &poly1, const gf255_poly &poly2) const
{
// Initialize:
gf255_poly dst = poly1;
// Add all coefficients of poly1 to poly2, respecting degree (the usual polynomial addition)
for (int deg = 0; deg <= poly2.degree(); deg++)
dst.addAt(deg, poly2.coef(deg));
return dst;
}
我已经找到了大量关于如何返回成员向量以及返回 std::vector是否仍然是一种糟糕的设计模式的信息(在大多数情况下似乎这很好)。不过,我还没有找到很多包含较大对象成员的向量。
同样的建议是否适用?我是否需要在我的复制构造函数中做任何特别的事情来帮助确保返回值优化?
对于不同版本的 C++ 标准,这个问题的答案是否不同?