что означает возврат строки C ++ *?

Так что строковая функция C ++

string& erase ( size_t pos = 0, size_t n = npos )

возвращается *this, Что это значит? Зачем мне это что-то возвращать?

пример

string name = "jimmy";
name.erase(0,1);

сотрет j и стать immy, но зачем мне вообще что-то возвращать?

4

Решение

За метод цепочки. Например, после стирания вы можете позвонить == на это что-то проверить

string name = "jimmy";
bool b = name.erase(0,1) == "immy";
9

Другие решения

Это только для удобства, например, вы можете связывать вызовы следующим образом:

name.erase(0,1).erase(3,1);
6

В вашем примере вы не необходимость это вернуть что-нибудь, потому что выражение:

name.erase(0,1)

эквивалентно:

((void)name.erase(0,1), name)

Например, вы можете написать:

while(name.erase(0,1).size()) {
std::cout << name << '\n';
}

или же:

while((name.erase(0,1), name).size()) {
std::cout << name << '\n';
}

или же:

while(name.erase(0,1), name.size()) {
std::cout << name << '\n';
}

или же:

while(true) {
name.erase(0,1);
if (!name.size()) break;
std::cout << name << '\n';
}

Стандарт решил дать вам выбор, вероятно, на основании того, что он может использовать возвращаемое значение для чего-то, а не «тратить» его.

По сути, он иногда сохраняет немного кода, который повторяет имя переменной или принимает ссылку на промежуточный результат.

Некоторые люди думают, что функции, которые модифицируют вызываемый ими объект, не должны ничего возвращать (идея заключается в том, чтобы ограничить использование функций с побочными эффектами до одной на оператор). В C ++ им просто приходится жить с тем, что разработчики стандартной библиотеки не согласны.

3

Вы можете делать такие вещи:

void process(std::string const &s) {}

process(name.erase(0,1)); //self-explanatory?

std::cout << name.erase(0,1) << std::endl;

//etc

И вещи, о которых упоминали другие ответы.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector