一種是按位與 1 & 2 = 0
一種是取位址int* p = &a;
一種是宣告引用,相當於定義變數別名:
int a = 3;
int& b = a; // b是a的引用,a,b是同乙個變數
b = 4; // a也變化為4
int c = 2;
b = c; // 是賦值給b或a,而不是把b作為c的引用,引用一旦被宣告,引用物件不可更改
引用的實質是指標的簡化運用版,上面的**等價為:
int a = 3;
int* const b = &a; // 常指標,b的位置不能更改,相當於引用不能更改自身的引用物件
*b = 4;
所以引用省去了宣告時的取位址操作和對變數記憶體位址引用時的解引用操作,而且引用不能隨意被更改,站在指標的角度上說,引用的意義等價於乙個常指標,也就是不能改變自己指向位置的指標。
引用在作為引數傳遞的時候,傳遞的是實參本身,c++裡面類設計經常要傳遞整個類作為引數,但如果在不必要的時候使用傳統的按值傳遞,效率損失可見一斑:
class foo ;
void bar(foo f)
比如這個函式bar,傳參的時候是按值傳遞,也就是實參的所有資料被重新複製到引數f裡,構造了乙個新物件f,它只是輸出引數f的abc成員,所以必要重新構造乙個臨時物件f,這樣造成了效率的損失,解決方法有2種:
void bar1(foo* f)
var bar2(foo& f)
這2種方式的運作機制是相同的,但是後者要更簡潔和優美一些,特別是在操作多層間接指標的函式裡面,直接使用指標的話,過多取位址&和解引用*容易造成**混亂,降低可讀性。
JS常見操作符
1.一元操作符 只能操作乙個值 遞增 遞減操作符 var o document.getelementbyid o 2 元加和減操作符 2.布林操作符 邏輯非alert undefined alert nan alert null true,null undefined nan返回true var p...
UNION操作符的用法
union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。select column name s from table name1 union...
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...