Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C/C+中交换两个没有第三个号码的号码+;_C++ - Fatal编程技术网

C++ 在C/C+中交换两个没有第三个号码的号码+;

C++ 在C/C+中交换两个没有第三个号码的号码+;,c++,C++,我们通常使用 a=a+b; b=a-b; a=a-b; 但是,如果我们使用int,那么在30000之后,代码就会失败;如果我们使用long,那么在1000000之后,代码就会失败。我的目标不是增加代码的长度,而是执行相同的操作。我已经尝试过使用位异或 a = a ^ b; b = a ^ b; a = a ^ b; 还是没用,有什么办法吗?交换一个变量a和一个变量b:std::swap(a,b) 例如: int a = 10; int b = 20; std::cout <<

我们通常使用

a=a+b; 
b=a-b; 
a=a-b;
但是,如果我们使用
int
,那么在
30000
之后,代码就会失败;如果我们使用
long
,那么在
1000000
之后,代码就会失败。我的目标不是增加代码的长度,而是执行相同的操作。我已经尝试过使用
位异或

a = a ^ b;
b = a ^ b;
a = a ^ b;

还是没用,有什么办法吗?

交换一个变量
a
和一个变量
b
std::swap(a,b)
例如:

int a = 10;
int b = 20;

std::cout << "Before swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';

std::swap(a, b);

std::cout << "After swap\n";
std::cout << "Value of a: " << a << '\n';
std::cout << "Value of b: " << b << '\n';
inta=10;
int b=20;

你能解释一下“代码失败”是什么意思吗?到底出了什么问题?看起来如果
a
b
太大,加法可能会超出
integer
范围。具有讽刺意味的是,所有避免使用额外变量的尝试都会导致较大的代码运行较慢。而且有额外的bug。这听起来像个问题。为什么要这样做?移动int与复制int的成本完全相同。不,std::swap特别不适用于r值(它在内部使用它们,但是对于int,这没有什么区别)。@MikeMB关于只在内部使用右值的好观点,我认为在上下文中会很清楚。编辑成显式。是的,ints也是如此,但我尽量回答尽可能广泛适用的问题,所以我想指出
std::swap的一般好处,如果“我不想使用第三个变量”的答案是创建1(实际上是3),那么这也是一个问题在函数中添加新变量并调用该函数。@PatrickM'Bongo如果我的用词混乱,我很抱歉。我想表达的是,与
a-b,在内部使用
b=std::move(a)
时不存在。同样是的,在这个特定的示例中,可能创建的temp变量(尽管不保证)使用常规副本。只要OP对非基本数据类型(如
std::vector
)使用
std::swap
,真正的好处就开始显现,这不会产生复制开销。