Один пример из Sutter & стандарты кодирования Alexandrescu поймала мой взгляд «. Пример 2: std::string::append
(ошибка Постусловие) При добавлении символа в строку, неспособность выделить новый буфер, если существующий один полностью блокирует операцию от выполнения документированной функции и обеспечивает ее документированные пост-условия, и поэтому является ошибкой ».Использование * это в качестве возвращаемого значения
Я не могу себе представить, что в любых нормальных условиях можно было бы проверить возвращаемое значение из append, но было любопытно, что это за значение, и оно оказывается *this
(которое может использоваться только внутри нестатической функции-члена) , Я полагаю, можно проверить длину строки до и после добавления, , но как можно получить доступ к *this
?
Например: проверка
std::string::s = "Hello World";
for (int i=0; i<many millions; ++i) {
s.append(s);
}
s.append("."); // Which we assume fails due to a buffer error.
Возвращаемое значение не для проверки. Он предназначен для использования. – juanchopanza
Я думаю, что здесь есть возвращаемое значение, чтобы вы могли писать такие вещи, как 'std :: cout << s.append (« Something »);'. –
Можете ли вы также использовать возвращаемое значение для вызова метода цепи? Например, 's.append (« Something »). Append (« другая строка »);'? – AaronCarson