int a { 0 }, b { 1 }; int& r { a }; // 引用变量 r 在声明的同时就要初始化,r是a的别名 r = 42; // 相当于 a = 42 r = b; // 相当于 a = b; 执行后 a 的值是1 // 此处不是让r变成b的引用 // 引用r声明并初始化后,r就不能再改为其它变量的引用 int& r2 = a; // 继续给a起别名 int& r3 = r; // 声明引用变量 r3,用r初始化 // 这个相当于 int& r3 = a; 因为 r 是 a 的别名
指针和引用的差异
指针和引用的应用场景是函数参数传递
void f(int* pa ,int* pb); void f(int& pa,int& pb);
从软件设计角度来看,使用引用更好,因为调用方不需要额外传参数时进行取地址运算.
存取值的方式
对指针变量需要使用*来读取相应内存的内容
初始化
指针没有要求
对象或变量的存在性
引用有要求
const和引用
**const <类型>&**常用于返回值以及参数传递(保证不能修改相应的变量)
1 2 3 4 5 6 7 8 9 10 11 12 13
//变量的引用 int val =100; int & myval1=var; constint & myval2 = var; myval1 = 300;//合法,可以通过myval2对var进行修改,此时myval2,myval3,var同时被修改 myval2 = 100;//非法
//常量的引用 int b=100; constint& aa=b;//b的引用,可以选择用const的修饰 constint& bb=1;//这里必须用const修饰 aa = 10;//非法 bb = 20;//非法
引用在参数传递中的使用
如果在函数中不修改变量,建议使用 const T&
1 2 3 4 5 6 7 8 9 10 11 12 13 14
int var =100; constint cvar =200; /*形参: void f(int a1,int &a2, const int& a3) { }*/ f(1,2,3);//2和a2 不合法 f(1,var,var);
RPN ==shares full-image convolutional features== with the detection network, thus enabling nearly ==cost-free== region proposals.
An RPN is a fully-convolutional network that simultaneously ==predicts object bounds and objectness scores== at each position. RPNs are trained end-to-end to generate highquality region proposals, which are used by Fast R-CNN for detection.