Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 517823

Инициализация std::string строками без Null-terminated - С++ для начинающих

$
0
0
Мое почтение, джентльмены.
Меня занимает следующий вопрос:
Часто для инициализации строки или для каких либо методов применяю Begin, End или указатель на начало строки и на элемент после последнего элемента см.рис.
Вложение 1509515

Для строк с завершающим нулем, все ок, end-указатель в пределах нашей памяти.
Но вот появились строки без нулевого окончания (с префиксом длинны) - Not Null-terminated string. Насколько корректно будут работать STL инструменты с такими строками, путем инициализации указателем на начало строки и на элемент после последнего элемента такой строки (Not Null-terminated string)?
Не будет ли обращения к данным за за пределами нашей памяти и выход в чужую? Там же нет Null-terminated, который есть в stl строках. Что говорят стандарты и практика? Есть ли гарантии, что stl будет пользоваться только адресной арифметикой для расчета диапазона символов и не полезет по указателю в чужую память?

к примеру:
:

wchar_t str1[] ={ L'a', L'b', L'c' };
std::wstring str2(str1, str1 + 3);
wchar_t ch = str1[0] + 3;//память за пределами нашего массива символов, возможно в другом процессе, а в инициализации выше есть туда указатель!


Изображения
Тип файла: png range-begin-end.PNG (8.3 Кб)

Viewing all articles
Browse latest Browse all 517823

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>