c – 将一对成员分配给变量

是否可以在不创建临时对象的情况下分配一对成员?
#include <tuple>
using namespace std;

pair< bool,int > foo()
{
    return make_pair( false,3 );
}

int main()
{
    int x;
    bool y;

    auto z = foo();
    x = z.second;
    y = z.first;

    return 0;
}

在上面的代码中,对象auto z需要在解析它之前“保持”该对,但是在实际代码中它的创建可能是昂贵的.

解决方法

是;为此发明了 std::tie
#include <tuple>
#include <iostream>

std::pair<bool,int> foo()
{
    return std::make_pair(false,3);
}

int main()
{
    int x;
    bool y;

    std::tie(y,x) = foo();
    std::cout << x << ',' << y << '\n';
}

// Output: 3,0

(live demo)

当然你仍然会在某个地方有一个临时对象(模数常量优化),但这是最直接的你可以编写代码,除非你直接从它们的最终值初始化x和y而不是首先在foo()中创建一对.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...