c++代码 把宽和高数据对调一下,为什么这样写数据 不做对调? int outWidth = out.w;
int outHeight = out.h;
out.w = outWidth;
out.h = outHeight;
在C++代码中,当你需要交换两个变量的值时,通常有几种方法可以实现。你提供的代码片段:
```cpp
int outWidth = out.w;
int outHeight = out.h;
out.w = outWidth;
out.h = outHeight;
```
这段代码的作用是获取 `out` 对象的宽度和高度,然后将它们存储在 `outWidth` 和 `outHeight` 变量中。接着,将 `outWidth` 赋值给 `out.w`,将 `outHeight` 赋值给 `out.h`。这实际上并没有交换 `out.w` 和 `out.h` 的值,而是将它们重新赋值回自身。
如果你想交换 `out.w` 和 `out.h` 的值,你应该这样写:
### 方法1:使用临时变量
```cpp
int temp = out.w;
out.w = out.h;
out.h = temp;
```
### 方法2:使用C++11的std::swap
```cpp
std::swap(out.w, out.h);
```
### 方法3:使用加法和减法(不推荐,仅作为示例)
```cpp
out.w = out.w + out.h;
out.h = out.w - out.h;
out.w = out.w - out.h;
```
### 方法4:使用位运算(不推荐,仅作为示例)
```cpp
out.w ^= out.h;
out.h ^= out.w;
out.w ^= out.h;
```
### 为什么原始代码不交换数据?
原始代码的问题在于它没有正确地交换两个变量的值。它首先将 `out.w` 的值赋给 `outWidth`,将 `out.h` 的值赋给 `outHeight`,然后又将 `outWidth` 赋给 `out.w`,将 `outHeight` 赋给 `out.h`。这实际上只是将原始值重新赋值回变量,没有实现交换。
### 正确的交换操作
要正确交换两个变量的值,你应该使用上述方法中的任意一种。这样可以确保 `out.w` 和 `out.h` 的值被正确地交换,而不是简单地重新赋值。
### 总结
在编写代码时,确保理解每个操作的意图和结果。在这种情况下,原始代码的意图是交换两个变量的值,但由于实现方式不正确,没有达到预期的效果。使用上述任何一种方法都可以实现正确的交换操作。