【摘录】引用是别名而并非指针

摘自《C++ Common Knowledge》

人们常常会将指针和引用混淆,原因大概在于C++编译器通常采用指针的方式实现引用,但引用其实不是指针,其行为和指针并不相同。

 

引用和指针存在三大区别:

一,不存在空引用;

int &a=*static_cast<int*>(0);   //错误

二,所有引用都要初始化;

三,一个引用永远指向用来对他初始化的那个对象

 

一个指向非常量的引用是不可以用字面常量或临时值进行初始化的:

double &cd=12.3; //错误

然而,一个指向常量的引用就可以:

const double &cd=12.3; //正确

template <typename T>

T add(const T &a,const T &b)

{

return a+b;

}

//…

const std::string &greeting=add(std::string(“hello”),

std::string(“,world”)); //正确

当一个指向常量的引用采用一个字面值来初始化时,该引用实际上被设置为指向采用该字面值初始化的一个临时位置。因此,cd并非真的指向字面值12.3,而是指向一个采用12.3初始化的类型为double的临时变量。

greeting引用则指向对add的调用所返回的无名临时string值。一般来说,这类临时对象在创建它们的表达式的末尾被销毁(离开作用域并且析构函数被调用)。然而,当这类临时对象用于初始化一个指向常量的引用时,在引用指向他们的期间,这些临时对象会一直存在。

原文链接: https://www.cnblogs.com/mx113/archive/2010/02/17/1668958.html

欢迎关注

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

    【摘录】引用是别名而并非指针

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

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

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

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

(0)
上一篇 2023年2月6日 下午7:01
下一篇 2023年2月6日 下午7:04

相关推荐