C++ 学习笔记(Structured bindings)

C++ 学习笔记(Structured bindings)

这个特性是 C++17 引入的,个人认为主要是解决如何让函数返回多个值的问题。在这之前,我们一般用 std::pair 或者 std::tuple 来返回多个值。比如下面的例子:

std::tuple<int, int ,int > test()
{
    return std::make_tuple(1,2,3);
}

std::pair<int, double> test2()
{
    return std::make_pair(12, 12.222);
}

    int a1, a2, a3;
    double b1;

    std::tie(a1, a2, a3) = test();
    qDebug() << "a1 = " << a1 << ",a2 = " << a2 <<", a3 = " << a3;

    std::tie(a1, b1) = test2();
    qDebug() << "a1 = " << a1 << ",b1 = " << b1;

在上面的例子中,我们先定义了一些变量,然后用 std::tie 把他们绑定成一个 std::tuple,这样就可以获取多个值了。

在C++ 17 中,把这个特性更近了一步。例如下面的例子:

    auto [aa1, aa2, aa3] = test();
    qDebug() << "aa1 = " << aa1 << ",aa2 = " << aa2 <<", aa3 = " << aa3;

另外,C++ 17 还扩充了 if 和 swtich 的语法,可以像下面这样:

    if(auto [aa1, aa2, aa3] = test(); aa2 == 2)
    {
        qDebug() << "aa1 = " << aa1 << ",aa2 = " << aa2 <<", aa3 = " << aa3;
    }

    switch (auto [aa1, aa2, aa3] = test(); aa2 ) {
    case 1:
        qDebug() << "1";
        break;
    case 2:
        qDebug() << "2";
        break;

    default:
        break;
    }
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Structured Bindings是C++17中的新特性,它允许我们将一个结构体或类的成员绑定到多个变量上,从而可以更方便地访问和操作这些成员。 具体来说,Structured Bindings允许我们使用auto关键字和花括号语法来定义多个变量,并将它们绑定到一个结构体或类的成员上。例如: ```cpp struct Point { double x; double y; }; Point p {1.0, 2.0}; auto [x, y] = p; ``` 上面的代码中,我们定义了一个名为p的Point结构体,并初始化它的x和y成员。然后我们使用Structured Bindings将x和y变量绑定到p的成员上。 现在我们可以直接使用x和y变量来访问和操作p的成员,例如: ```cpp x += 1.0; y -= 1.0; cout << "p = (" << p.x << ", " << p.y << ")" << endl; ``` 上面的代码中,我们通过修改x和y变量来修改了p的成员,并输出了修改后的p的值。 除了结构体和类,Structured Bindings还可以用于数组、标准库容器和其他类型的对象。例如: ```cpp vector<int> v {1, 2, 3}; auto [a, b, c] = v; ``` 上面的代码中,我们使用Structured Bindings将v中的第一个、第二个和第三个元素绑定到a、b和c变量上。 需要注意的是,Structured Bindings只能用于具有公共成员的结构体和类,或者具有类似于数组的操作符重载的对象。对于其他类型的对象,需要实现相应的操作符重载才能使用Structured Bindings。 总的来说,Structured Bindings是一个非常方便和实用的特性,可以让我们更轻松地访问和操作结构体、类、数组和容器等对象的成员。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值