短縮版:
オブジェクトに 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++ 標準のバージョンによって異なりますか?