C++函数多返回值

在Go中,一个函数可以返回多个值。许多标准库中的函数返回2个值,一个是期望得到的返回值,另一个是函数出错时的错误信息。比如下面是一个Go打开文件的常用写法

file, err := os.Open(dataFile)
if err != nil {
    // error handle
}

函数返回多个值简洁明了,错误信息显示表达。不像C语言API,比如recv返回-1隐示表示发生了某种错误。

C++在语法层面规定函数最多只能有一个返回值,一般要返回多个值时,采用如下两种做法:

  • 返回一个pair或结构体
  • 出参返回,使用引用或指针

这两种做法都不够直观,其实在C++17语言中,我们可以使用返回tuple和decomposition declarations语法来模拟Go语言函数多返回值功能。如下所示:

#include 
#include 
#include  

std::tuple foo()
{
    return std::make_tuple("hello", true);
}

int main()
{
    auto [value, exists] = foo();
    if (exists) {
        std::cout << value << std::endl;
    }
    return 0;
}

虽然可能还是比不上Go直观,但基本上已经够清晰的了,只是编译的时候要加上-std=c++17。

你可能感兴趣的:(C++函数多返回值)