私はポインタと長さを返す関数を持っており、std::string::assign(pointer, length)
に電話したいと思います。長さがゼロでポインタがnullptrの場合、特別なケース(clear
)を作らなければならないのですか?nullptrをstd :: string :: assignに渡すことは有効ですか?
C++標準は言う:
21.4.6.3 basic_string::assign
basic_string& assign(const charT* s, size_type n);
Requires: s points to an array of at least n elements of charT.
だから何n
場合はゼロになりますか?ゼロ文字の配列とは何ですか?また、ゼロ文字をどのように指していますか? それは
s.assign(nullptr, 0);
を呼び出すために有効になっていたり、それは未定義の動作ですか?
サイズn
が0の場合、libstdC++の実装はポインタs
を逆参照しないように見えますが、それはほとんど保証されません。
関連するノートでは、 'char a [4]; s.assign(s + 4、0); '合法ですか?これは「長さ0の配列」の合理的な解釈のようであり、実際にはおそらく起こりうる。 –