gpt4 book ai didi

c++ - 为什么这个程序要交换值?

转载 作者:可可西里 更新时间:2023-11-01 15:33:31 25 4
gpt4 key购买 nike

我有以下代码:

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <conio.h>
#include <cstring>
#include <iomanip>

void swap(long a, long b)
{
long temp;

temp=a;
a=b;
b=temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int x = 5, y = 3;
cout << x ;
cout << y << endl;

swap(x, y);

cout << x ;
cout << y << endl;

getch();
return 0;
}

程序给出输出:

5 3

3 5

程序实际上交换了值!这是为什么? swap() 的参数不是指针或引用。

(我使用的是 VS 2005)

最佳答案

你的 swap函数根本没有被调用。

您包含的其中一个标准库正在拉入 <utility> , 它声明了一个名为 swap 的函数模板在std命名空间。既然你是using namespace std; , 那swap函数被带入全局命名空间并被调用。


为什么是std::swap选择而不是你的 swap功能?你的swap函数需要两个 long按值(value)计算;要调用该函数,每个 int 都需要整数提升争论。

std::swap是一个函数模板。它需要两次引用 T ,并且当该函数模板被实例化时 T = int ,两个参数完全匹配。所以,std::swap比您的函数更匹配,因此在重载解析期间选择它。


这是 using namespace std; 的原因之一是邪恶的,应该避免。如果删除 using 指令,您的函数将是唯一可用的函数,并且会被调用。

关于c++ - 为什么这个程序要交换值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919300/

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