gpt4 book ai didi

c++ - 使用 std::tie 的一个类轮交换

转载 作者:太空狗 更新时间:2023-10-29 23:30:03 27 4
gpt4 key购买 nike

在python中我们可以交换两个变量

>>> a , b = b , a

我们可以在 C++11 中进行类似的交换

void swap(int &a,int &b)
{
std::tie(a,b) = std::make_tuple(b,a);
}

以上工作正常,在 O3 生成类似的程序集

void swap(int &a,int &b)
{
int c = a;
a = b;
b = c;
}

但我的问题是它符合标准还是我遗漏了什么?还是侥幸之类的……

a = (a+b) - (b=a);

其中有序列点问题。

最佳答案

这很好。

std::tiestd::make_tuple 的调用可以以任何顺序发生,但它们不会修改 ab,只创建 std::tuple,分别引用和复制 ab。只有在调用 operator= 时,才会通过引用分配进行任何修改。

关于c++ - 使用 std::tie 的一个类轮交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32759865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com