std::string( (const char*)(0) )

Julie16

Что при этом должно происходить по стандарту?

Dasar

скорее всего падать в segfault

Julie16

У меня другое мнение - мне кажется что должна создаваться пустая строка. Но мне интересно другое - что по этому поводу говорит стандарт?

Julie16

Нда, я был не прав:
g++: terminate called after throwing an instance of 'std::logic_error'
what: basic_string::_S_construct NULL not valid
Aborted
icc: Segmentation fault

Dasar

Строка - это валидный поинтер, ссылающаяся на массив char-ов, заканчивающий нулем
Нулевая строка - это валидный поинтер, ссылающийся на символ с кодом 0
null-евой поинтер - это, соответственно, непонятно что.

Julie16

Это все понятно. но мне интересно, что по этому поводу говорит стандарт. Или не говорит ничего.

Dasar

т.е. null - это скорее отсутствие строки.

Dasar

> Это все понятно. но мне интересно, что по этому поводу говорит стандарт. Или не говорит ничего.
имхо, он скорее всего упоминает только первое утверждение. (про то, что строка - это указатель на набор символов).

Julie16

Т.е. undefined behavior

Julie16

Но вот g++ кидает ексепшн, а они вроде пытаются максимально соответствовать стандарту.

Dasha30

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
Оставить комментарий
Имя или ник:
Комментарий: