boost::array
(またはtr1
またはstd
バージョン)は、ビルトイン配列に比べて優れた追加機能を提供します。今まで組み込みの配列をstd/tr1/boost ::配列に置き換えるのはいつでも安全ですか?
、私たちのコードベースは唯一、組み込み配列を含んで、たとえばため(アップ作ったが、スタイルが一致する):
WORD m_lastReadFlags[FLAGS_MAX];
...
WORD flagBuffer[FLAGS_MAX];
if (getFlags(flagBuffer)) {
memcpy(m_lastReadFlags, flagBuffer, sizeof(m_lastReadFlags));
...
私はone'llアイデアを得ると思います。
さて、私の質問は、コード内でそれらの場所のために、どこboost::array
にドロップするとarray
100%のセマンティクスは、アレイに組み込まれたためにドロップイン保存され、(なぜなら作らその他の変更の)意味をなさないと思いますか?
boost::array<WORD, FLAGS_MAX> m_lastReadFlags;
と:使用する(たとえば)は、上記のコード書き換えることができ、ある
- (のみサイレント行動の変化は、私を悩ませているものです可能性のあるコンパイルエラーOKです。) memcpy(場合によってはc_array()
またはdata()
を使用するように適合されています)、他の配列のようなアクセスは同じままですか? もちろん、ローカルバッファを配列で置き換えてmemcpy
を削除したり、std::copy
などを使用したりすることもできますが、この問題のポイントは組み込み配列と配列クラスの互換性に関することです。
更新:特に私を悩まことの一つは、組み込み配列をポインタとして使用されている(memcpy
場合のように)な場所です。すべての発生は、 コンパイラによって捕捉されるか、正しく処理されますか?
割り当てについてはどうですか?
T arr1[N]; // or array<T, N>
T arr2[N]; // or array<T, N>
T* p1;
...
// Note, not all combinations will compile:
arr1 = arr2;
p1 = arr1;
arr2 = p1;
...