C++ STL - 为什么将一个返回迭代器的函数视为void函数?

Lin*_*980 3 c++ c++14

STL有许多返回迭代器的函数.例如,STL列表函数erase返回迭代器(C++ 98和C++ 11).不过,我认为它被用作无效功能.即使是cplusplus.com网站也有一个包含以下代码的示例:

mylist.erase(it1, it2); 
Run Code Online (Sandbox Code Playgroud)

它不返回迭代器.不应该正确的语法如下?

std::list<int>::iterator iterList = mylist.erase(it1, it2)?
Run Code Online (Sandbox Code Playgroud)

小智 8

您不必在C++中使用返回值.通常,返回的迭代器应该对该容器有一个新的有效迭代器很有用.但从语法上讲,这是正确的.只要记住,删除之后,it1it2不会有效了.


for*_*818 7

它不返回迭代器.不应该正确的语法如下?

它确实返回一个迭代器,但就像任何其他函数一样,您可以忽略返回的值.如果你只想删除一个元素并且不关心返回的迭代器,那么你可以简单地忽略它.

实际上忽略返回值比您预期的更常见.可能忽略返回值的最常见位置是返回值的唯一目的是启用链接.例如,赋值运算符通常写为

Foo& operator=(const Foo& other){
    /*...*/
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以写出像a = b = c.但是,当您只写时b = c,通常会忽略该调用返回的值.还要注意,当你写b = c这个时确实会返回一个值,但是如果你只是想做这个赋值,那么除了忽略返回值之外别无选择.