1. 程式人生 > >C++中一些重要概念區別

C++中一些重要概念區別

指標和引用的比較(p171)

雖然使用引用(reference)和指標都可間接訪問另一個值,但它們之間有兩個重要區別。

第一個區別在於引用總是指向某個物件:定義引用時沒有初始化是錯誤的。

第二個重要區別則是賦值行為的差異:給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另一個物件關聯。引用一經初始化,就始終指向同一個特定物件(這就是為什麼引用必須在定義時初始化的原因)。

指標和引用的比較
雖然使用引用(reference)和指標都可間接訪問另一個值,但它們之間有兩個重要區別。
第一個區別在於引用總是指向某個物件:定義引用時沒有初始化是錯誤的。
第二個重要區別則是賦值行為的差異:給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另一個物件關聯。引用一經初始化,就始終指向同一個特定物件(這就是為什麼引用必須在定義時初始化的原因)。
考慮以下兩個程式段。第一個程式段將一個指標賦給另一指標:
int ival = 1024, ival2 = 2048;
int *pi = &ival, *pi2 = &ival2;
pi = pi2; // pi now points to ival2
賦值結束後,pi 所指向的 ival 物件值保持不變,賦值操作修改了 pi 指標的值,使其指向另一個不同的物件。現在考慮另一段相似的程式,使用兩個引用賦值:
int &ri = ival, &ri2 = ival2;
ri = ri2; // assigns ival2 to ival
這個賦值操作修改了 ri 引用的值 ival 物件,而並非引用本身。賦值後,這兩個引用還是分別指向原來關聯的物件,此時這兩個物件的值相等。

指向指標的指標

c++中冒號(:)和雙冒號(::)的用法
http://blog.csdn.net/zimingjushi/article/details/6549390

c++中::和.使用有什麼區別?c++中::和.使用有什麼區別?_百度知道  https://zhidao.baidu.com/question/243467870.html

::是域作用符,是各種域性質的實體(比如類(不是物件)、名字空間等)呼叫其成員專用的。
(如果有個區域性變數與全域性變數同名(假設都是int a;),預設呼叫的 a 是區域性變數,如果要訪問全域性變數a,就要這麼寫“::a”。使用域作用符來加以區別;前面沒寫具體的域名,就是指預設域)
.是成員作用符,是物件專用的。
比如
struct A
{
        int InnerPara;
        static int StPara;
} a;
a訪問時用“.”,如a.InnerPara;A訪問用“::”,如A::StPara;