@(c/c++學習筆記)
頂層`const`和底層`cosnt`
關於`constexpr`
關於型別說明符`auto`
關於型別說明符`decltype(expr)`
**常量引用可以繫結非常量的變數 **
非常量引用不可以繫結到常量的變數
引用的型別必須與其繫結的物件型別一致。除非引用是常量引用,常量引用可以以變數、表示式、字面值作為初值,只要後者可以轉換成常量引用的型別即可。這裡其實是編譯器創造了乙個臨時變數來儲存轉換後的結果,然後讓常量變數指向該臨時變數。(反正常量引用你也沒法修改,指向臨時變數也無大礙。)
指標一樣
指向常量的指標可以指向非常量的變數
指向非常量的指標不能指向常量的變數
int n =0;
int*
const np =
&n;
不變的是指標的值,即那個位址,而不是該位址中儲存的資料。
頂層const
是指指標本身是個常量(或者物件自身是個常量);底層const
是指指標指向的物件是個const
。
constexpr
和const
的不同在於,它要求它初值必須為常量表示式。另外,它的作用和頂層const
一致。
int n =1;
constepr int
*p =
&n;
不知道變數是什麼型別的時候,用auto
進行說明,讓編譯器自己根據初始值猜去吧。
auto a=
mistyfunc()
;
decltype(expr)
會返回表示式或者函式expr
的結果型別,但是實際上它並不會去計算該表示式,而是分析得到表示式的型別。decltype(expr)
和auto
不同的一點是前者會儲存頂級cosnt
和引用作為返回的型別,但是auto
卻會忽略二者。不同的原因在於decltype(expr)
雖然根據expr
返回型別,但並不會將expr
的值賦值給變數。但是auto
卻會把表示式的值初始化給變數。
decltype((expr))
返回的是引用!
稍加分析
auto
型別說明符是根據表示式值的型別推斷變數的型別。如果表示式的值型別是個頂層const
,那它的意思是它的變數值(也就是那個位址不可改變),並非說它指向的記憶體中的資料不可改變,所以auto
拿到指向該記憶體的位址,但是並不會改變該變數值,這是合情合理的。
至於引用,引用用來賦值時,變數得到的結果是引用所繫結的變數的值,所以當然得是變數的型別,即捨棄引用符號。
C語言 指標變數運算操作
指標變數除了的8種基本操作,還可以使用關係運算子來比較指標。1 賦值 注意,位址應該和指標型別相容。也就是說,不能把double型別的位址賦給指向int的指標,至少要避免不明智的型別轉換。c99 c11已經強制不允許這樣做。int a 6 int b 0 int p1 a int p2 賦值 p2 ...
c環境變數操作函式
getenv 取得環境變數內容 相關函式 putenv,setenv,unsetenv 表頭檔案 include 定義函式 char getenv const char name 函式說明 getenv 用來取得引數name環境變數的內容。引數name為環境變數的名稱,如果該變數存在則會返回指向該內...
變數及變數操作步驟
變數 存放資料的,並且該變數中的資料是可以發生改變的 常用資料型別 整數型別 int 浮點型別 double 字串型別 string 字元型別 char 布林型別 boolean 變數的操作步驟 第一步 宣告變數,也就是確定當前變數存放資料的型別 語法格式 資料型別 變數名稱 如 int a 資料型...