Мое почтение, джентльмены.
Меня занимает следующий вопрос:
Часто для инициализации строки или для каких либо методов применяю Begin, End или указатель на начало строки и на элемент после последнего элемента см.рис.
Вложение 1509515
Для строк с завершающим нулем, все ок, end-указатель в пределах нашей памяти.
Но вот появились строки без нулевого окончания (с префиксом длинны) - Not Null-terminated string. Насколько корректно будут работать STL инструменты с такими строками, путем инициализации указателем на начало строки и на элемент после последнего элемента такой строки (Not Null-terminated string)?
Не будет ли обращения к данным за за пределами нашей памяти и выход в чужую? Там же нет Null-terminated, который есть в stl строках. Что говорят стандарты и практика? Есть ли гарантии, что stl будет пользоваться только адресной арифметикой для расчета диапазона символов и не полезет по указателю в чужую память?
к примеру:
Меня занимает следующий вопрос:
Часто для инициализации строки или для каких либо методов применяю 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;//память за пределами нашего массива символов, возможно в другом процессе, а в инициализации выше есть туда указатель!