const char* data() const;
Это говорит о том, что const char *
, возвращаемый путем вызова str.data()
, не изменится, если кто-то не изменит строку, из которой он получен. Когда кто-то вызывает непостоянную функцию-член, возвращаемый указатель может быть недействительным или может указывать на данные, отличные от тех, на которые он указывал сразу после возврата функции str.data()
.
Это означает, что вы можете передать возвращенные данные, например, в функции C. Это означает, что вы не должны делать что-то вроде:
const char *old = str.data();
size_t len = str.length();
...call a function that modifies str...
// cout << old << endl;
// Since old is not guaranteed to be null terminated (thanks MSalter),
// do something else with the old data instead of writing to cout.
// Inventiveness not at a high this morning; this isn't a particularly
// good example of what to do - a sort of string copy.
char buffer[256];
memcpy(buffer, old, MIN(sizeof(buffer)-1, len));
buffer[len] = '\0';
К тому времени, когда будет выполнено копирование памяти I / O , old
может быть недействительным, а len
также может быть неправильным.