神啊!来吧
c++吧
全部回复
仅看楼主
level 9
影圣天 楼主
按照内联函数的定义,他不是在编译时将函数体代码插入到函数调用处吗?
举个例子:
#include<iostream>
using namespace std;
inline int as(int a,int b)
{
int t;
t=a;
a=b;
b=t;
return 100000;
}
int main()
{
int x(1),y(3);
as(x,y);
cout<<x<<' '<<y;
return 0;
}
那么内联后不就是就相当于把as的函数的形参替换后复制张贴到主函数中吗?这样的话x和y的值应该交换了吧!即使我不用内联函数的返回值。请问又为什么编译器没有交换他们呢?[乖]
2015年11月14日 01点11分 1
level 6
参数用引用
2015年11月14日 01点11分 2
书上说内联函数实参和形参的结实是实参名与形参名替换后插入主函数中,那么内联函数的函数体执行后,xy的值不是变了吗?
2015年11月14日 01点11分
level 6
x,y通过值传递的方式复制给a,b,所以最终你交换了a,b的值,但这跟x,y半毛钱关系都没有
2015年11月14日 01点11分 3
大神请看下图[乖]请问您的说法和书的说法一致,还是书又问题[乖]
2015年11月14日 01点11分
level 9
影圣天 楼主
2015年11月14日 01点11分 4
你这本书的说法很奇怪啊,我之前没听说过这种说法。“处处替换”应该是宏,而不是内联函数。既然是函数必然可以用表达式做实参,比如int x,x1,y,y1;as(x+x1,y+y1);按你书的说法怎么内联展开?x+x1是不能做左值的,即x+x1=t是非法的。
2015年11月14日 02点11分
既然有书有老师,建议买本c++ primer,看课本应付考试,看primer学习,不明白的还能问老师。
2015年11月14日 02点11分
你那本是什么书?
2015年11月14日 02点11分
@火儿…肉糊了 我看的是c++语言程序设计教程 清华大学杨进才写的书[乖]
2015年11月14日 02点11分
level 9
影圣天 楼主
[呵呵]
2015年11月14日 01点11分 5
level 11
编译器不保证都内联
2015年11月14日 01点11分 6
可是,我的函数超级简单,应该内联了吧[乖]
2015年11月14日 02点11分
@影圣天 你不是内联的问题,我大致看了一下,你是想交换ab吗
2015年11月14日 02点11分
@969742 其实我研究的就是内联的问题,我按照书上讲的原理来推理他应该可以不用地址就交换他们的值
2015年11月14日 02点11分
[乖]
2015年11月14日 02点11分
level 11
#include<iostream>
using namespace std;
inline void swap(int& a, int& b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a = 5;
int b = 8;
swap(a, b);
cout << "a=" << a << " b=" << b << endl;
return 0;
}
2015年11月14日 02点11分 8
[真棒]
2015年11月14日 02点11分
@影圣天 按值传递不能交换,因为函数里是临时变量
2015年11月14日 02点11分
我其实看了下书上说,内联的本质就是在编译时把一个函数插入到主函数中,但是后面他又说,内联函数和一般函数没有区别,那么我就有问题了,是不是我可以用内联函数来交换他的值,而不是利用地址来交换呢?
2015年11月14日 02点11分
@影圣天 你想多了.....内联不会违反传递原则
2015年11月14日 02点11分
level 9
影圣天 楼主
2015年11月14日 02点11分 9
level 9
影圣天 楼主
[泪]
2015年11月14日 03点11分 10
level 2
这是啥软件 好厉害
2015年11月14日 03点11分 11
。。。。。 搜索贴吧c4droid
2015年11月14日 03点11分
level 15
综上,这本书很扯淡。
2015年11月14日 05点11分 12
[真棒]我也这么认为!!!我现在已经被这书弄的晕死了[泪]
2015年11月14日 05点11分
1