Ich habe eine Funktion, die einen Zeiger und eine Länge zurückgibt, und ich möchte std::string::assign(pointer, length)
aufrufen. Muss ich einen Sonderfall (Aufruf clear
) machen, wenn die Länge Null ist und der Zeiger nullptr sein kann?Ist es zulässig, nullptr an std :: string :: assign zu übergeben?
Der C++ Standard sagt:
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.
Was also, wenn n
Null ist? Was ist ein Array von null Zeichen und wie zeigt man darauf? Ist es gültig zu nennen
s.assign(nullptr, 0);
oder ist es nicht definiertes Verhalten?
Die Implementierung von libstdC++ scheint den Zeiger s
nicht zu dereferenzieren, wenn die Größe n
Null ist, aber das ist kaum eine Garantie.
Auf eine verwandte Anmerkung würde 'char a [4]; s.assign (s + 4, 0); "legal sein? Das scheint eine vernünftige Interpretation von "array of length 0" zu sein und könnte in der Praxis plausibel erscheinen. –