クラスの初期化で必要なコンストラクタを選択するには、クラス内のinitの割り当てスタイルを使用する必要があるようです。クラス内のinit(代入スタイル)とコンストラクタのパフォーマンス
class Foo {
// This lets me sets the vector size
std::vector<char> buf = std::vector<char>(BUF_SIZE);
// this didn't compile and made me realize finding another way to provide constructor parameters was necessary
// std::vector<char> buf{BUF_SIZE};
};
これは2つのオブジェクトが構築され、このスタイルで「BUF」を初期化することを意味しています、代入演算子が呼び出され、第二の目的は、破壊されましたか?または、これは単なる構文的な砂糖であり、生成されるコードは次のようになります。
class Bar {
public:
Bar() : buf(BUF_SIZE) {}
std::vector<char> buf;
};
これはおそらくコンパイラ固有ですか?
は 'のstd ::ベクトル BUF {BUF_SIZE}'と 'のstd ::ベクトル BUF(BUF_SIZE)は'異なることを行う - あなたはどちらをしたいですか? –
UnholySheep
良いコンパイラであればそれはなくなってしまいますが、C++ 17では、とにかくエリートすることはありません。 – chris
私の目標は、私の目標が初期値のどんな種類を提供するのではなく、ベクトルの初期化サイズを設定することだったことを示すために投稿を明確にしました。 – Kevin