这几天在看《NS与网络模拟》这本书,对于我这样的菜鸟来说,看其中的程序遇到了不少的问题。这几天经常看到类似u_int32_t&srcid(){return(srcid_);}和int&seqno(){return(seqno_);}这样的语句,今天上午自己在vc里面对这样的句子测试了几遍,终于大概搞明白其中的原理了。原来这就是返回类型为引用的函数。我的测试程序如下:
#include <iostream>
class example
{
public:
int a;
int b;
int getoutA(){return (a+b);}
int &getoutB(){return (a);}
};
int main()
{
example AA;
AA.a=5;
AA.b=2;
std::cout << AA.a << std::endl;
example & BB=AA;
std::cout << BB.b << std::endl;
std::cout << AA.getoutA() << std::endl;
std::cout << AA.getoutB() << std::endl;
return 0;
}
最终输出结果为:
5
2
7
2
getoutB()返回的就是成员变量a的引用,如果getoutA()也改为返回引用类型:int &getoutA(){return (a+b);}那就会出错,因为rerun返回的是表达式a+b的值,该值存放于系统临时变量中,getoutA()执行完就释放了,&必须要返回确切内存地址的值才行(不知道这样说对不对)。
采样返回类型为引用的函数有很多好处,例如可以提高执行效率,还有安全类型检查等功能。