当前位置:  开发笔记 > 编程语言 > 正文

尝试使用{}和s​​td :: make_pair()交换两个变量时的不同行为

如何解决《尝试使用{}和s​​td::make_pair()交换两个变量时的不同行为》经验,为你挑选了2个好方法。

我试图std::tie()按照以下代码交换两个变量(我知道std::swap,我只是出于好奇而尝试这个):

#include 
#include 

using std::cin; using std::tie; 
using std::cout; using std::endl;
using std::make_pair;

int main() {
    int a = 2, b = 10;
    cout << "Before Swapping using {}" << endl;
    cout << "a: " << a << " b: " << b < 

我用它编译了它g++ test.cpp -std=c++11 -o test.

但输出是这样的:

Before Swapping using {}
a: 2 b: 10
After Swapping using {}
a: 10 b: 10
Before Swapping using make_pair()
a: 2 b: 10
After Swapping using make_pair()
a: 10 b: 2

所以,我的问题是,因为我们可以编写{a, b}而不是std::make_pair(a, b)每次编写(C++ 11以后),为什么这两个版本提供不同的输出?

我的猜测是以下一行

std::tie(a, b) = {b, a};

没有成对,出于某种原因只是改变了它的价值a.但我不确定.



1> Jarod42..:

tie(a, b) = {b, a};

会用的std::tuple operator = (std::tuple&&).而不是std::tuple operator = (std::tuple&&)你所期望的.

std::tie(a, b)是一个std::tuple.
std::tuple有几个operator =,但唯一可行的(非类型){a, b}是复制/移动分配.



2> François And..:

{b, a}使得std::tuple同时std::make_pair使一个std::pair.

考虑一下会发生什么std::pair.它实际上是将一个变量分配给另一个变量,然后尝试将另一个变量分配给第一个变量.它相当于做a = b; b = a;b = a; a = b;.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有