C++的多个返回值

383 阅读1分钟

对于复杂的应用程序,具有不仅仅返回一个值的函数通常很方便。从C ++使用结构到利用最新的C ++ 11元组类模板,有很多不同的方法可以用C ++实现。

在很多情况下,返回对象的明显选择似乎有些过大。首先,您需要声明结构。很少有这种结构需要供消费者使用,因此您必须将其公开给外界。实例的构建也是没人喜欢进行的另一种仪式活动。

幸运的是,如果该函数仅返回两个值,则可以使用std :: pair。最有可能的,make_pair将被用来构建对。可以分别使用first和访问该对中的每个元素second。在以下示例中对此进行了说明:

std::pair<std::string , int> findPerson() {     return std::make_pair("Joe Sixpack", 42); } int main(int, char**) {     std::pair< std::string, int> person = findPerson();     std::cout < < "Name: " << person.first << std::endl;     std::cout << "Age: " << person.second << std::endl;     return 0; }

如果您需要两个以上的值怎么办?好吧,显然std::pair不适合这份工作。在这种情况下,我们可以利用Boost Tuple库中的boost:tuple。

如果您已经在使用std::pair,很容易熟悉boost::tuple。可以使用创建元组,使用make_tuple来访问其元素get,其中n表示元素索引。

#include <boost /tuple/tuple.hpp> boost::tuple<std::string , std::string, int> findPerson() {     return boost::make_tuple("Joe", "Sixpack", 42); } int main(int, char**) {     boost::tuple< std::string , std::string, int> person = findPerson();     std::cout < < "Name: " << person.get< 0>() < < " "         << person.get< 1>() < < std::endl;     std::cout << "Age: " << person.get< 2>() < < std::endl;     return 0; }

使用最新的C ++ 11,因为std :: tuple已经可用,所以不再需要依赖第三方库。稍作调整,前面的Boost示例将在C ++中显示。

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

还要注意使用use auto,可以避免不必要的冗长。编译器知道的返回类型,findPerson不再需要冗长的类型声明。

#include&lt;tuple&gt; std::tuple&lt;std::string,std::string,int&gt;findPerson() { returnstd::make_tuple("Joe","Sixpack",42); } intmain(int,char**) { autoperson=findPerson(); std::cout&lt;&lt;"Name: "&lt;&lt;std::get&lt;0&gt;(person)&lt;&lt;" "&lt;&lt; std::get&lt;1&gt;(person)&lt;&lt;std::endl; std::cout&lt;&lt;"Age: "&lt;&lt;std::get&lt;2&gt;(person)&lt;&lt;std::endl; return0; }

当我们讨论它时,不妨提及std :: tie,它对轻松拆开元组很有用。这是使用进行元素访问的便捷替代方法get。下面的代码片段演示了其用法。

intmain(int,char**) { std::stringfirst_name,last_name; intage; std::tie(first_name,last_name,age)=findPerson(); std::cout&lt;&lt;"Name: "&lt;&lt;first_name&lt;&lt;std::endl; return0; }