2. 指標
3. const
4.**說明
是物件的別名,分為左值引用和右值引用。
其定義方法如下:
int ival=1;
int&refval = ival;
這樣定義後,變數ival
和refval
指向的是同乙個物件,他們都可以更改物件的值。
其注意事項如下:
引用必須在定義的時候被初始化,作為函式形參也屬於左值引用,因為在編譯鏈結的過程中,會給函式形參進行初始化。
引用型別的初始值必須是乙個物件,而不能是乙個具體的值,比如這樣是錯誤的int & a=1024;
只能繫結到乙個將要銷毀的物件上,用&&
來獲得右值引用。 其可以自由接管所引用物件的資源。
例如:
int i=42;
int&& rr2=i*43;
//i*43會建立乙個臨時變數來儲存計算結果,賦值後即銷毀。
int b=1;
int* a;
a=&b;*a=2;
//*a表示解引用,此時b變數的值是2
int& c=
*a;//c是乙個引用,代表*a的別名
c=3;
//此時b的值是3
std::cout<<
"*a: "
<<
*a
"b: "
"c: "
<3c:
3
定義常量,其值只可讀不可修改。
例如:
const
int bufsize=
512;
常用的一種用法是常量引用,引用只能讀,不能寫。
int r2=3;
const
int& r1=r2;
int num=2;
int*
const p1 =
#// 常量指標(頂層const):p1將一直指向num所代表的物件,不能指向別的物件,num的值可以改變
const
int num2=2;
const
int*p2=
&num2;
//指向常量的指標(底層const):p2指向常量物件,常量物件的值不能改變,但是p2可以指向別的常量物件
例如下面函式的形參msg
是乙個常量引用,引用的是型別為::planning_msg::planned_trajectory
的物件。所以傳入的引數應該是型別為::planning_msg::planned_trajectory
的變數。
void
setmsg
(const
::planning_msg::planned_trajectory& msg)
下面我們來看需要傳入的變數_planning_data
,它是乙個函式的傳入引數,其在形參中的定義為:
const planning_msg::planned_trajectory::constptr& _planning_data
這乙個常量引用,引用的是型別是planning_msg::planned_trajectory::constptr
,這個型別是ros msg編譯出來的乙個型別,是planning_msg::planned_trajectory::
的乙個常量共享指標型別。
因為_planning_data
是乙個指標,而setmsg
的引數是乙個::planning_msg::planned_trajectory
型別變數,所以我們在呼叫的時候需要解引用指標,然後傳參,如下所示:
setmsg
(*_planning_data)
;
C 引用 指標與const
引用即繫結到另乙個物件上,因此定義了乙個引用,對其操作即是對與之繫結的物件進行操作 如為引用賦值,獲取引用的值,以引用作為初始值.與引用類似,實現對物件的間接訪問。指標和引用的本質區別 引用不是物件,指標本身即是物件。指標和引用的共同 都需要型別和物件型別嚴格匹配 不支援型別轉換 並且指標只能指向變...
const, 引用與指標
const int bufsize 512 對const的引用 簡稱為 常量引用 const int ci 1024 常量 const int r1 ci 對常量的引用 常量引用,不允許通過r1修改ci不能通過引用來改變它所繫結的值 double dval 3.14 const double rd ...
const與指標 引用
定義乙個指標 p const int p null intconst p null int const p null 上面兩行定義完全等價,第三行則不同。下面兩行定義也完全等價 const int const p null intconst const p null 舉例說明 int x 3 con...