十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
目录
创新互联建站2013年开创至今,先为新华等服务建站,新华等地企业,进行企业商务咨询服务。为新华企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。前言
一、引用
1.1 引用的概念
1.2 引用特性
1.3 常引用
1.4 引用传参和引用作返回值
1.5 传值、传引用效率比较
1.6 引用和指针的区别
1.7引用和指针的不同点:
二、auto
2.1 auto简介
2.2 auto使用
1.auto与指针和引用结合起来使用
2. 在同一行定义多个变量
2.3 不能使用auto的场景
总结
前言
auto和引用
提示:以下是本篇文章正文内容,下面案例可供参考
从语法层面来说,引用相当于对一个变量取别名,例如 int a = 10 ; int& b = a;
b就是a的别名,b并没有被定义成一个新的变量,b和a指向同一片地址空间;
1.2 引用特性引用的三个特性:1.引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
1.3 常引用int main()
{
const int a = 10;
int& b = a;
int& b = 10;
//上两个引用语句在实现时会出现权限的放大(a本身是常量,无法改值,
//但是被引用后,a的别名b变成了int型,b的改变会同时改变a的值),会在编译阶段报错
const int& b = a;
//这样写就不会出现权限冲突
double d = 12.34;
int& rd = d;
//因为在发生隐式类型转换时会产生临时变量,而临时变量是const变量,所以上式也会报错,
const int& rd = d;
return 0;
}
1.4 引用传参和引用作返回值1.作参数 void Swap ( int & left , int & right ) { int temp = left ; left = right ; right = temp ; } 2.作函数返回值 int & Add ( int a , int b ) { int c = a + b ; static int c = a+b; return c ; //因为add函数栈帧在函数运行结束后会被系统收回(大部分编译器都会直接释放) //所以直接返回c的引用,可能只是返回了一个随机值,也有可能返回正确值; //所以在使用引用做返回值时,返回值一般不能是栈上的变量,可以用malloc或者static } int main () { int & ret = Add ( 1 , 2 ); Add ( 3 , 4 ); cout<< "Add(1, 2) is :"<< ret<< endl ; return 0 ; }1.5 传值、传引用效率比较 以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直 接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效 率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。 1.6 引用和指针的区别 在 语法概念上 引用就是一个别名,没有独立空间,和其引用实体共用同一块空间. 但是如果我们去看引用和指针的汇编代码对比,我们会发现在汇编层面实现它们的代码一摸一样
int main () { int a = 10 ; int & ra = a ; ra = 20 ; int* pa = & a ; * pa = 20 ; return 0 ; }
也就是说,指针和引用在底层的实现方式是一样的,但是在语法层的差异巨大。
1.7引用和指针的不同点: 1. 引用概念上定义一个变量的别名,指针存储一个变量地址。 2. 引用 在定义时 必须初始化 ,指针没有要求 3. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何 一个同类型实体 4. 没有 NULL 引用 ,但有 NULL 指针 5. 在 sizeof 中含义不同 : 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32 位平台下占 4 个字节 ) 6. 引用自加即引用的实体增加 1,指针自加即指针向后偏移一个类型的大小 7. 有多级指针,但是没有多级引用 8. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理9. 引用比指针使用起来相对更安全
二、auto 2.1 auto简介与早期c中的auto类型符不同,c++中的auto不再是一个存储类型指示符,而是作为一
个新的类型指示符来指示编译器, auto 声明的变量必须由编译器在编译时期推导而得 。 2.2 auto使用 1.auto与指针和引用结合起来使用 用 auto 声明指针类型时,用 auto 和 auto* 没有任何区别,但用 auto 声明引用类型时则必须 加 &int main () { int x = 10 ; auto a = & x ; auto * b = & x ; auto & c = x ; cout<< typeid ( a ). name ()<< endl ; cout<< typeid ( b ). name ()<< endl ; cout<< typeid ( c ). name ()<< endl ; * a = 20 ; * b = 30 ; c = 40 ; return 0 ; }2. 在同一行定义多个变量 当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译 器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量 。
void TestAuto () { auto a = 1 , b = 2 ; auto c = 3 , d = 4.0 ; // 该行代码会编译失败,因为 c 和 d 的初始化表达式类型不同 } // 此处代码编译失败, auto 不能作为形参类型,因为编译器无法对 a 的实际类型进行推导 void TestAuto ( auto a ) {} void TestAuto () { int a [] = {1 , 2 , 3 }; auto b [] = {4 , 5 , 6 }; }2.3 不能使用auto的场景 1. auto 不能作为函数的参数 2. auto 不能直接用来声明数组
本文简述了c++中&和auto两个关键字的使用方法和一些特殊情况。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧