函式過載相關注意事項

2022-04-05 13:51:41 字數 1209 閱讀 7307

1.過載函式呼叫問題中的列舉型別提公升

1

void newf(unsigned char

); 2

void newf(int

); 3 unsigned char uc = 129

; 4 newf(virtual); //

calls newf(int)

5 newf(uc); //

calls newf(unsigned char)

列舉型別 tokens 只有兩個列舉成員, 最大的值為 129。 這個值可以用 unsigned char 型別表示,很多編譯器會將這個列舉型別儲存為 unsigned char 型別。然而,列舉成員 virtual 卻並不是 unsigned char 型別。就算列舉成員的值能儲存在 unsigned char 型別中,列舉成員和列舉型別的值也不會提公升為 unsigned char 型別。

2.「僅當形參是引用或指標時,形參是否為 const 才有影響。」,這是《c++ primer》中的一句話,如果形參是非const引用,這種情況很好理解,不必多說;如果形參是const引用,理解起來要轉個彎,《c++ primer》中的這段話可以輔助理解:「如果傳遞的是非 const 物件,則上述任意一種函式皆可行。非 const 物件既可用於初始化 const 引用,也可用於初始化非 const 引用。但是,將 const 引用初始化為非 const 物件,需通過轉換來實現,而非 const 形參的初始化則是精確匹配。」。有了這段話,下面這兩個過載函式的呼叫就不會混淆:

1      record lookup(account&); 

2 record lookup(const account&); //

new function

3const account a(0

); 4

account b;

5 lookup(a); //

calls lookup(const account&)

6 lookup(b); //

calls lookup(account&)

1      f(int *); 

2 f(int *const); //

redeclaration

「此時,const 用於修改指標本身,而不是修飾指標所指向的型別。」

DllMain相關注意事項

1 在dllmain的dll process attach分支中,盡量只呼叫kernel32.dll中的函式。因為其他系統api可能依賴於其他dll,而那些dll有可能還沒有被載入到程序空間中且依賴於當前dllmain所在的dll,這樣會導致迴圈依賴 其實,在使用者程序中呼叫其他系統模組的api一般...

git相關注意事項

git的相關注意事項 git add 新增所有修改到暫存區。git reset head file add之後發現錯誤,撤銷 add的檔案到暫存區。git add file後進行 git commit m 修改某某檔案 後發現錯誤 要撤銷。解決方式 git log 檢視提交到暫存區的 commit ...

Hive相關注意事項

1.load data locall inpath into table xx 如果是本地路徑,其實就是一次put上傳操作 如果路徑是hdfs,其實是一次mv操作 2.建立分割槽表partitioned by 字段不能和表中列的字段重複 3.建立分桶表cluster by 必須是表中的某列的字段 4...