所以C++字符串函数
string& erase ( size_t pos = 0, size_t n = npos )
返回*this
。这意味着什么?为什么我需要它来返回任何东西?
例子
string name = "jimmy";
name.erase(0,1);
会擦除j
并变成immy
,但为什么我需要它来返回任何东西?
对于方法链。例如,在你擦除之后,你可以调用==
它来检查一些东西:
string name = "jimmy";
bool b = name.erase(0,1) == "immy";
这只是为了方便,例如您可以像这样链接调用:
name.erase(0,1).erase(3,1);
在您的示例中,您不需要它返回任何内容,因为表达式:
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++ 中,他们只需要忍受标准库的设计者不同意的事实。
你可以这样做:
void process(std::string const &s) {}
process(name.erase(0,1)); //self-explanatory?
std::cout << name.erase(0,1) << std::endl;
//etc
以及其他答案提到的事情。