鱼C论坛

 找回密码
 立即注册
查看: 3358|回复: 6

c++ 引用的测试

[复制链接]
发表于 2012-7-21 22:00:02 | 显示全部楼层 |阅读模式
1鱼币
#include<iostream>
using namespace std;
int main()
{
void swap(int &x,int &y);
int a = 19;
int b = 14;
swap(a,b);
cout << a << b << endl;
return 0;
}
void swap(int &x,int &y)
{
int temp;
temp = x;
x = y;
y = temp;
return;
}
一个我想测设引用的小程序。发现不是我想要的结果。但是下面的就是对的啊,起初我还是怀疑编译器,但是下面的没问题呢。我单步调试发下根本就是没有调用函数。可是怎么可能不调用函数呢?求鱼油们指教了。帮我分析一下其中的原因,在此感激不尽。
#include<iostream>
using namespace std;
int main()
{
void swap(int &x);
int a = 19;

swap(a);
cout << a  << endl;
return 0;
}
void swap(int &x)
{

x = 12;

return;
}

最佳答案

查看完整内容

这个是VC6的bug VC6在名字空间stl里声明了函数模板std::swap但是实现存在一些问题。所以在你的例子里调用了该有问题的函数模板产生的函数。 其实最简单的解决办法就是你换个函数名如把swap改为myswap就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-21 22:00:03 | 显示全部楼层
这个是VC6的bug
VC6在名字空间stl里声明了函数模板std::swap但是实现存在一些问题。所以在你的例子里调用了该有问题的函数模板产生的函数。

其实最简单的解决办法就是你换个函数名如把swap改为myswap就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-21 22:12:44 | 显示全部楼层
把函数void swap(int &x,int &y);
声明 变为全局声明就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-21 22:22:57 | 显示全部楼层

那会吧,我把a变量和b变量改成全局变量了。就是没想到这函数的声明改成全局变量。可是后来估计是与子函数的temp上了。我就把它给改成全局变量了。还是不行。我感觉到还是没有这么的简单。还有原因。为什么我后来写的就可以了呢。我就在测试了一下。
#include<iostream>

using namespace std;

int main()
{
        void swap(int &x);
        int a = 19;
        int b = 14;
        swap(a);
        cout << a << endl;
        return 0;
}

void swap(int &x)
{
        int temp = 10;
        temp = x;
       
        return;
}
最终确定跟子函数的局部变量有关。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-21 22:24:47 | 显示全部楼层
孙九 发表于 2012-7-21 22:22
那会吧,我把a变量和b变量改成全局变量了。就是没想到这函数的声明改成全局变量。可是后来估计是与子函 ...

#include<iostream>

using namespace std;

int main()
{
        void swap(int &x);
        int a = 19;
        int b = 14;
        swap(a);
        cout << a << endl;
        return 0;
}

void swap(int &x)
{
        int temp = 10;
        x = temp;
       
        return;
}
不是跟字函数的局部变量有关才对,气死我了打岔了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-21 22:29:19 | 显示全部楼层
孙九 发表于 2012-7-21 22:24
#include

using namespace std;

使用VC6编C++程序有很多这样的地方,因为VC6不标准。
比如后面的友元函数
还有STL都会出很多让人郁闷的事情
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-21 22:58:36 | 显示全部楼层
仰望天上的光 发表于 2012-7-21 22:23
这个是VC6的bug
VC6在名字空间stl里声明了函数模板std::swap但是实现存在一些问题。所以在你的例子里调用了 ...

果然是呢,我在网上查了,关于函数的全局声明和局部声明没有找到,我想你的答案是对的。因为调试的时候进入子函数,发现进入的不是我们想要的结果。嘿嘿谢谢了。果然厉害嘿嘿,我弄了很长时间。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 07:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表