引數傳遞和返回值的小結:
void
t(int
*) {}
void
u(const
int*
p)const
char
*v()
const
int*
const
w()int
main()
函式t 可以用const和非const 指標做引數,而函式u 只能用const指標作為引數,而且編譯器也不允許使用儲存在const指標裡的位址來建立乙個非const指標。
函式v 返回的是常量的字元陣列,編譯器把它儲存在靜態儲存區里,所以返回是安全的。
函式w 返回值要求這個指標和指標所指向的物件均為常量。首先變數i 是靜態的,返回後也是有效的位址。但在後面main函式的測試裡發現w的返回值可以賦給const int* ,其實這並不矛盾,因為這時w的返回值是當右值來使用的,只有當它用成左值時才會出問題,就像最後一行。
標準引數傳遞:
在c++裡面,對於使用者自定義物件我們通常是按引用的方式來傳遞,但需要注意的一點就是,把乙個臨時物件傳遞給接受const引用的函式是可能的,但不能把乙個臨時物件傳遞給接受指標的函式。
類裡的常量:
1.const 成員
我們如果要在類裡面建立乙個陣列,就需要用const代替#define設定陣列大小,這時使用的const意味 著"在這個物件生命期內,它是乙個常量"。然而,對這個常量來講,每個不同的物件可以含有乙個不同的值。這樣就出現了乙個問題,什麼時候初始化這個(非static)常量,這裡用到了建構函式初始化列表,它出現在函式引數表和冒號後但在建構函式主體開頭的花括號前。
class
hony
;hony::hony(
intsz): size(sz) {}
void
hony::print()
intmain()
2.編譯期間類裡的常量(靜態常量)
還有一種情況就是,如何讓乙個類有編譯期間的常量成員?這裡就需要用關鍵字static ,"不管類的物件被建立多少次,都只有乙個例項",而且必須在static const 定義的地方對它初始化。
#include
<
string
>
class
stringstack;
這裡只給出了類的宣告,不過可以看出static const 是怎麼用的。
3. 舊**中的"enum hack"
在舊版本c++中,不支援在類中使用static const。另外有種典型的解決辦法,使用不帶例項的無標記enum。
class
bunch
inti[size];};
這裡使用的enum不占用物件的儲存空間,在編譯期間得到列舉值。
常量綜述 一
常量在c 裡面是乙個很重要的概念,有很多細節的地方很容易忽略,這裡我根據 c 程式設計思想 總結了一下。1.出現的歷史 常量最普遍的用法是值替代,在c語言裡我們用巨集來定義常量 define max 100 但這是預編譯的,也就是說在編譯時只是簡單巨集展開,並不檢查巨集的語法是否正確。所以在c 裡引...
推薦演算法綜述(二)
協同過濾 cf 推薦演算法通過在使用者活動中尋找特定模式來為使用者產生有效推薦。它依賴於系統中使用者的慣用資料,例如通過使用者對其閱讀過書籍的評價可以推斷出使用者的閱讀偏好。這種演算法的核心思想就是 如果兩個使用者對於一些項的評分相似程度較高,那麼乙個使用者對於乙個新項的評分很有可能類似於另乙個使用...
C 模組二 常量
一,整型常量 1.關鍵字 int short int long int signed unsigned 2.八進位制 數字0開頭 十六進製制 數字0和字母x x 二,實型常量 1.關鍵字 float double 2.小數形式 整數部分.小數部分 3.指數形式 尾數部分e e 指數部分 三,字元型常...