首页 > 编程语言 >为什么 C++ 有指针了还要引用

为什么 C++ 有指针了还要引用

时间:2023-05-30 19:11:28浏览次数:44  
标签:C++ 别名 传递 保证 引用 指针

引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。
编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。
所以引用传递,实质上是地址传递,别名这东西只是概念,是一种抽象,别名是没法传递的。
别名,可不是真实的数据类型。
因为,函数传递参数需要,数据复制,所以明的暗的值传递,不可避免。
引用的高效,在于对大的数据,不用直接的复制数据。

引用能实现的基本上指针都可以实现,那为什么C++还需要引入引用呢?下面看看C++之父Bjarne Stroustrup是怎么说的吧:

真相大白,原来C++引用的引入是为了支持运算符重载。顺便提一句,既然C++引入了引用,那为什么C++不和Java一样抛弃指针呢?
答:为了兼容C语言。

补充一点引用带来的好处:
用指针的使用经常犯得错:
1.操作空指针;
2.操作野指针;
3.不知不觉改变了指针的值,而后还以为该指针正常;
如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。

引用区别于指针的特性是 :
1.不存在空引用(保证不操作空指针);
2.必须初始化(保证不是野指针);
3.一个引用永远指向他初始化的那个对象(保证指针值不变);
人为保证变为了编译器来保证,更加安全。

标签:C++,别名,传递,保证,引用,指针
From: https://www.cnblogs.com/kbqlm/p/17444132.html

相关文章

  • C++中模拟split
    #include<iostream>#include<sstream>usingnamespacestd;intmain(){ stringstr; getline(cin,str); istringstreamin(str); stringa; while(getline(in,a,'*')){ cout<<a<<''; } return0;}123*456*789123......
  • 蓝桥杯 基础练习 特殊回文数(C++)
    资源限制内存限制:512.0MBC/C++时间限制:1.0sJava时间限制:3.0sPython时间限制:5.0s问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整......
  • C++ 不想让转义字符发挥转义的功能
    今天写代码时,编译器有一个警告:我寻思着也没啥问题,于是就看了一下警告,然后回车,就成了这样,也就是说,字符串里面的转义字符不再时转义字符而是普通的字符了,输出看看是不是:果然是这样没错.......
  • 第十四届蓝桥杯大赛青少组全国总决赛初级组C++C++题解
    第十四届蓝桥杯大赛青少组全国总决赛初级组\(C++\)题解第一题给定一个十进制正整数\(N(1≤N≤10^9)\),请从小到大输出\(1\)~\(N\)之间(含\(1\)和\(N\))所有满足以下要求的数:这个数转换为八进制后是一个回文数;这个数是一个平方数。例如:\(N=20\),在\(1\)~\(20\)之间满足要求......
  • ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
    [root@localhostPaddleOCR]#strings/lib64/libstdc++.so.6|grep'CXXABI'CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3CXXABI_1.3.4CXXABI_1.3.5CXXABI_1.3.6CXXABI_1.3.7CXXABI_TM_1[root@localhostPaddleOCR]#find/-name"libstdc++.......
  • gdb调试c++多线程死锁问题初步
    https://blog.csdn.net/zsiming/article/details/126695393 总结:psaux|grepfilename //找出进程IDtop-HpPID //列出进程号为PID下的所有线程gdbatattchPID //用gdb调试正在运行的进程(进程号为PID)(需要sudo权限)threadapplyallbt //这里涉及2个命令:thr......
  • C++结构体对齐详解
    内存对齐是一种提高内存访问速度的策略,CPU在访问未对齐的内存可能需要经过两次的内存访问,而经过内存对齐一次就可以了cout<<"char:"<<sizeof(char)<<endl;cout<<"int:"<<sizeof(int)<<endl;cout<<"short:"<<sizeof(short)<<endl;cout&l......
  • c++11: all_of 、 any_of 和 none_of
    有效的字母异位词classSolution{public:boolisAnagram(strings,stringt){if(s.size()!=t.size())returnfalse;intans[26]={0};for(auto&ch:s){++ans[ch-'a'];}for(auto&......
  • C/C++学生成绩管理系统[2023-05-30]
    C/C++学生成绩管理系统[2023-05-30]学生成绩管理系统设计----高级语言课程设计题目问题描述:设学生信息包括:学号、姓名、期末成绩、平时成绩,对学生的学习成绩信息进行管理。设计要求:实现学生信息的录入、修改、插入、删除、查询、计算总评成绩、根据总评成绩排序和划分等级、......
  • c++类型转换
    C语言中的类型转换C语言和C++都是强类型语言,如果赋值运算符左右两侧变量的类型不同,或形参与实参的类型不匹配,或返回值类型与接收返回值的变量类型不一致,那么就需要进行类型转换。C语言中有两种形式的类型转换,分别是隐式类型转换和显式类型转换:隐式类型转换:编译器在编译阶段自......