#include using namespace std;
int main()
;}
輸出結果為
int a;或者 int a = ; 都是對a的列表初始化。在使用列表初始化時候,若型別轉換後損失資訊,則編譯器報錯。例如
int a會報錯
int a; 和 extern int a = 10; 是定義
int *p = nullptr;
int *p = 0;
int *p = null;
i,&r, *p等都是宣告符 ,乙個宣告符定義了乙個變數,並指定該變數為與基本資料型別有關的某種型別
定義多個復合型別時候,採用int *p, *q這種方式比較好,即把修飾符和變數識別符號寫在一起。
#include #include using namespace std;
int a = 10;
int main()
}
以上**輸出是42;對於int *&r,按照從右向左讀的規則,首先說明r是引用,然後說明是某個指標的引用,最後說明是int型別指標的引用
編譯器對待const變數和巨集定義一樣,先將所有在檔案**現的變數用常量替代。所以每個檔案要單獨定義const變數。如果 實在需要在檔案中共享const變數,需要用到extern關鍵字
指向常量的指標:
int i = 0; const int *p = &i;則p指向的物件不能通過p修改(p指向的物件既可以是普通變數也可以是const變數),但是p本身可以修改,即他可以指向不同的位址。
常量指標:
int i = 0; int * const p = &i; p為常量指標,定義時候必須初始化。之後p的內容不能修改,即不可以指向其他變數。
int *p = p3;語句是錯誤的,因為p3有底層const,即p3指向的變數不能被改變,可是p是普通的指標,指向的變數能夠改變,所以報錯。
但是p2 = p3;是正確的。因為p2和p3都有底層const。雖然p3有頂層const,p2沒有頂層const,但是這個不影響。
int temp; //用於對引用進行初始化。
int i = 0;
int &r = i;
int *p = &i;
decltype(r) a = temp;
decltype(r + 0) b;
decltype(*p) c = temp;
decltype(*p + 0) d ;
decltype(i) e;
decltype((i)) f = temp;
當decltype的括號內使用的是乙個變數,則得到的型別就是該變數的型別;如果使用的是乙個變數被乙個或多個括號括起來,那麼將decltype裡面的內容當成乙個表示式。例如對於程式中變數c的定義可以理解為c是表示式中*p的引用,所以c是int &型別。
好吧以上是廢話,只要記住下面幾種:如果decltype使用的是變數,那麼結果就是變數型別;如a和e的定義。如果使用的變數被乙個或多個括號括起來,那麼結果是該變數型別的引用,如f的定義;如果decltype使用引用型別或者指標型別作為表示式一部分,那麼表示式返回型別就是結果的型別,如變數b,d的定義;如果decltype使用的是乙個指標解引用,那麼結果型別是指標指向的物件的引用型別。
定義的如上所示程式片段,b,d,e是int型別,a,c,f是int&型別;
decltyoe((i+0)) f = temp;這句定義中,f是int 型別
第二章 變數和基本型別
第二章 變數和基本型別 1 基本內建型別 1 有效數字 float 6位 double 10位 2 符號位 使用一位符號位的表示方式的8位signed整型取值是 128到127 3 越界賦值 取值數目求模 2 字面值常量 1 無符號長整型 1024ul 2 字串 自動在末尾新增乙個空字元 3 變數 ...
第二章 變數和基本型別
識別符號 運算子 宣告符 2.3 復合型別 基於其他型別定義的型別 1.引用 定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和他的初始值一直繫結在一起,所以無法令引用重新繫結到另外乙個物件,所以引用必須初始化 2.指標 指標本身是乙個物件,...
第二章 變數和基本型別
切勿混用帶符號數和無符號數 include using namespace std int main 輸出的結果一直都是no,所以不可混用,請注意size 返回的是size type型別,而該型別也是unsigned的。只有內建型別存在字面值,字面值常量的值是不能修改的 它存放在 段中 內建型別的全...