std::string( (const char*)(0) )
скорее всего падать в segfault
У меня другое мнение - мне кажется что должна создаваться пустая строка. Но мне интересно другое - что по этому поводу говорит стандарт?
g++: terminate called after throwing an instance of 'std::logic_error'
what: basic_string::_S_construct NULL not valid
Aborted
icc: Segmentation fault
Нулевая строка - это валидный поинтер, ссылающийся на символ с кодом 0
null-евой поинтер - это, соответственно, непонятно что.
Это все понятно. но мне интересно, что по этому поводу говорит стандарт. Или не говорит ничего.
т.е. null - это скорее отсутствие строки.
имхо, он скорее всего упоминает только первое утверждение. (про то, что строка - это указатель на набор символов).
Т.е. undefined behavior
Но вот g++ кидает ексепшн, а они вроде пытаются максимально соответствовать стандарту.
ISO/EIC 14882:1998(E)
First edition 1998-09-01
Programming languages - C++
21 Strings library
21.3.1 basic_string constructors [lib.string.cons]
basic_string(const charT* s, const Allocator& a = Allocator;
9 Requires: s shall not be a null pointer
10 Effects: Constructs an object of class basic_string and determines its initial string value from the array
of charT of length traits::length(s) whose first element is designated by s, as indicated in Table 41
Оставить комментарий
Julie16
Что при этом должно происходить по стандарту?