| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 840 人关注过本帖
标题:这里传了引用进去,为什么没有改变a和b的值
只看楼主 加入收藏
后卿
Rank: 4
来 自:网络
等 级:业余侠客
威 望:1
帖 子:302
专家分:295
注 册:2016-10-22
结帖率:81.71%
收藏
已结贴  问题点数:1 回复次数:6 
这里传了引用进去,为什么没有改变a和b的值
程序代码:
 
#include<iostream>
using namespace std;
template <typename type1>
type1 swap(type1 a, type1 b)
{
    a = b;
    cout << "函数模板";
    return 0;
}

 
int main()
{
    int a = 0;
    int b = 1;
    int& la = a;
    int& lb = b;
    ave(la, lb);
    cout << a << "  " << b;
    system("pause");
    return 0;
}

按照我的理解,传入a和b的引用,相当于传入了它们的地址,在函数中通过改变它们的引用,来改变它们。
搜索更多相关主题的帖子: 改变 传入 函数 int 引用 
2023-04-06 12:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:1 
ave(la, lb); 是不是将 template <typename type1> type1 swap(type1 a, type1 b) 实例成 swap<int>( int, int ) ?

所以
程序代码:
#include <iostream>
using namespace std;

template<typename type1>
void ave( type1 a, type1 b )
{
    a = b;
}

 
int main()
{
    int a = 0;
    int b = 1;
    int& la = a;
    int& lb = b;
    ave(la, lb);
    cout << a << "  " << b;
}

等同于
程序代码:
#include <iostream>
using namespace std;

void ave( int a, int b )
{
    a = b;
}

 
int main()
{
    int a = 0;
    int b = 1;
    int& la = a;
    int& lb = b;
    ave(la, lb);
    cout << a << "  " << b;
}

展开函数调用,就等同于
程序代码:
#include <iostream>
using namespace std;

int main()
{
    int a = 0;
    int b = 1;
    int& la = a;
    int& lb = b;
    int ave_a = la;
    int ave_b = lb;
    ave_a = ave_b;
    cout << a << "  " << b;
}

里面没有一句在修改a
2023-04-06 13:50
C之进学者
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:8
注 册:2022-10-16
收藏
得分:1 
编译器推断出的type1类型并非是整型引用int&,而是int,所以进行的是类值拷贝操作。
需要在模板函数中声明为左值引用 void ave( type1& a, type1& b )
2023-04-06 14:25
后卿
Rank: 4
来 自:网络
等 级:业余侠客
威 望:1
帖 子:302
专家分:295
注 册:2016-10-22
收藏
得分:0 
回复 2楼 rjsp
请问您的意思是
int ave_a = la;
    int ave_b = lb;
    ave_a = ave_b;

这三行代码里面,第三行相当于修改了ave_a 的值,而不是修改了la的值,是这个意思码
2023-04-06 14:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
是的
2023-04-06 14:37
后卿
Rank: 4
来 自:网络
等 级:业余侠客
威 望:1
帖 子:302
专家分:295
注 册:2016-10-22
收藏
得分:0 
回复 5楼 rjsp
好的,非常感谢
2023-04-06 16:45
后卿
Rank: 4
来 自:网络
等 级:业余侠客
威 望:1
帖 子:302
专家分:295
注 册:2016-10-22
收藏
得分:0 
回复 3楼 C之进学者
好的,非常感谢
2023-04-07 18:24
快速回复:这里传了引用进去,为什么没有改变a和b的值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016095 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved