当前位置: 首页> 教育> 大学 > 模具设计与制造_邯郸网站建设怎么开发_个人微信管理系统_在线网页生成器

模具设计与制造_邯郸网站建设怎么开发_个人微信管理系统_在线网页生成器

时间:2025/7/10 3:23:28来源:https://blog.csdn.net/shaggy123456/article/details/146282795 浏览次数:0次
模具设计与制造_邯郸网站建设怎么开发_个人微信管理系统_在线网页生成器

1、C++支持函数重载的原理——名字修饰

【X.cpp】——>预处理:头文件展开/宏替换/去掉注释/条件编译——>【X.i】——>编译:检查语法,生成汇编代码(指令级代码)——>【X.s】——>汇编:将汇编代码转成二进制机器码——>【X.o】——>链接:合并链接,生成可执行程序——>【X.exe】

要实现函数重载,在链接的时候,生成的符号表会引入函数名修饰规则,不同的语言/不同的系统/不同的编译器有不同的函数名修饰规则。有了函数名修饰规则以后,被重载的函数的函数名就不是一样的了。(本质上是把参数带到名字里去了,但是是一种简化的带)
2、引用
引用不是定义一个新的变量,而是对已有的变量取别名。

int a = 0;
int& b = a; //此处b是a的别名,a和b用的同一块空间,如果分别对其取地址会发现地址一样;
// 引用在一般场景下可能没有太大的用处,但在需要输出型参数的时候非常有用
// 本来需要传地址然后解引用的地方(int* i),改成(int& ri)就可以直接用了,ri与i本身等价
int& b;  // 该语句是非法的,引用必须在定义的时候就初始化,决定是谁的引用;
// C++的引用不能改变指向,一旦确定是谁的别名之后就不能变为别人的别名了;// 还有一种用法,是函数的传引用返回
// 这种会出现空间都释放了,还返回这个空间的别名的问题,需要注意
// 但这种用法一方面可以提高返回参数的效率,也可以在一些容器设计的时候,同时完成读和修改操作;
struct Seqlist{int a[10];int size;
}
int& SLAT(struct Seqlist& ps, int i)
{assert(i < ps.size);return (ps.a[i];)
}
int main()
{struct Seqlist ss;ss.size = 3;SLAT(ss, 0) = 10;cout << SLAT(ss, 0)  << endl;
}// C++中结构体已升级为类,此时用引用返回更舒畅
struct SeqList
{// 成员函数int& at(int i){assert( i < size);return a[i];
}// 成员变量int a[10];int size;
}int main()
{struct SeqList s1;  // 传统兼容C语言的用法SeqList s2;  //  类的实例化方法
}
// 当然之后用运算符重载之后会更更流畅;// 在引用的过程中,权限可以平移、可以缩小但不能放大,即const变量不能被普通变量引用
const int a = 0;
int& b = a; //非法语句,权限放大了
int d = a;  // 这个时赋值哦,只是拷贝,和权限没关系哦
const int& c = a; //可以,权限的平移
int xx = 1;
const int& yy = xx;  // 可以,权限的缩小
// 小扩展
int i = 1;
double ii = i;  // 这个是合法的
double& ii = i;  // 是非法的
const double& ii = i;  // 又是合法的
// 说明:因为在C/C++中类型转换会产生临时变量,此处这个临时变量为double类型的,临时变量具有常性,所以需要const修饰;

小扩展:
虽然在语法上,引用不需要另外开辟空间,但实际上在底层,引用和指针是一样的,即引用也是通过指针实现的;
引用与指针在语法上的区别
1)引用概念上定义一个变量的别名,指针存储一个变量的地址;
2)引用在定义时必须初始化,指针没有要求;
3)引用在初始化引用一个实体后,不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体;
4)没有NULL引用,但有NULL指针;
5)在sizeof中含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占字节个数;
6)引用自加(++)即引用的实体增加1,指针自加即指针向后偏移一个类型的大小;
7)有多级指针,但没有多级引用;
8)访问实体方式不同,指针需要显式解引用,引用编译器自己处理;
9)引用比指针使用起来相对安全;

关键字:模具设计与制造_邯郸网站建设怎么开发_个人微信管理系统_在线网页生成器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: