C++小知识

1.引用是别名而非指针

内容:当一个引用初始化时它所指向的那个对象必须存在。即一个引用就是在该引用被初始化之前已经存在的一个对象的别名。一个指向非常量的引用不可以用字面值或临时值进行初始化:

 1template <typename T>
2 void swap(T &a,T &b){
3 T temp(a);
4 a=b;
5 b=temp;
6 }
7 double &d=12.3; //错误!
8 swap(std:string("Hello"), std::string(", world"));// 错误
9
10 //然而指向一个常量的引用就可以
11 const double &cd =12.3;
12 template <typename T>
13 T add(const T &a,const T &b){
14 return a+b;
15 }// OK
16
17 const std::string &greeting= add(std:;string("Hello"),std::string(", world"));//OK

原因:当一个指向常量的引用采用一个字面值来初始化时,该引用实际上被设置为指向采用该字面值初始化的一个临时位置。所以cd并非真的指向字面值12.3,而是指向一个采用12.3初始化的,类型为double的临时变量。greeting引用则是指向对add调用所返回的无名临时string值。一般来说这类临时对象在创建它们的表达式的末尾被销毁(确切的说是,就是离开作用域且析构函数被调用)。但是,当这类临时对象用于初始化一个指向常量的引用时,在引用指向它们的期间,这些临时对象会一直存在。

原文链接: https://www.cnblogs.com/lxp1988/archive/2012/02/19/2358222.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++小知识

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/41997

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午6:47
下一篇 2023年2月8日 下午6:47

相关推荐