Какая польза от «целей» в эти дни?
Несколько дней назад я наткнулся на небольшую ошибку, когда код выглядел примерно так:
ostringstream ss;
int anInt( 7 );
ss << anInt << "HABITS";
ss << ends;
string theWholeLot = ss.str();
Проблема заключалась в том, чтоends
вставлял '\ 0' вostringstream
такtheWholeLot
на самом деле выглядело как"7HABITS\0"
(то есть ноль в конце)
Теперь это не обнаружилось, потому чтоtheWholeLot
затем использовался, чтобы взятьconst char *
часть использованияstring::c_str()
Это означало, что ноль был замаскирован, поскольку стал просто разделителем. Однако, когда это изменилось, чтобы использовать строки повсюду, нуль внезапно что-то означал и сравнения, такие как:
if ( theWholeLot == "7HABITS" )
потерпит неудачу Это заставило меня задуматься: предположительно, причинаends
это возврат ко днямostrstream
когда поток обычно не заканчивался нулем и должен был быть таким, чтобыstr()
(который затем изгоняется неstring
ноchar *
) будет работать правильно.
Однако теперь, когда невозможно изгнатьchar *
изostringstream
, с помощьюends
это не только излишне, но и потенциально опасно, и я собираюсь удалить их все из моего клиентского кода.
Может ли кто-нибудь увидеть очевидную причину использованияends
вstd::string
только среда?