C 後遺症, 掉了個坑, 特此記錄

2021-07-02 18:17:56 字數 824 閱讀 8895

string512 str1 = "123123";

與string512 str2;

str2 = "456";

有何區別?

之前用c#其實是不在意這個問題的,直到今天用cpp寫了個string512類,才知道這裡面原來還有說法..

首先, string512 str1 = "123123"; 這個語句已經有很多人掉進了坑里, 認為是"先有乙個內容為123123的匿名物件生成,然後呼叫拷貝構造賦值給str1", 而事實是: 這個語句是直接呼叫了string512(const char*)這個有參構造, 沒有任何臨時物件生成!!如果沒有string512(const char*),那麼編譯器會報錯: 不存在const char[7]轉換到string512的適當

建構函式

..之所以有"生成了臨時物件"的錯覺,大概是跟

void foo(string a);

foo("123");

這種情景發生了混淆....

後面的兩個語句呢? 

string512 str2毫無疑問,只是簡單的呼叫了string512的無參(預設)構造, 關鍵在於後一句: str2 = "456": 這個語句到底做了什麼?

答案是這樣的: 

一) str2檢查"="操作符有沒有過載, 如果有, 那麼就直接呼叫void operator=(const char*)

二) 如果"="操作符沒有過載呢? 那麼str2就會去呼叫有參構造string512(const char*).

三) 如果沒有有參構造string512(const char*),又沒有對"="進行過載呢? 於是編譯器報錯:沒有與這些運算元匹配的"="運算子

公升級後遺症

老機公升級,玩家們所持的態度和觀點往往是 對症下藥 哪個配件不行換公升級哪個,實在不行就整個平台都換掉。不過,玩家在公升級過程中往往會忽略乙個問題,那就是電源供電。與其他配件一樣,pc電源的規格一直在不斷進化當中,從早期的atx 1.1 2.0 2.01 2.02 2.03,到近期的atx 12v ...

清除上網後遺症

相信大家駕馭著ie戰車馳騁在internet戰場,感覺相當愜意吧。但征戰沙場久了,別忘記打掃戰場啊!一 清除cookies cookies翻譯為漢語就是小甜餅,小甜餅味道當然好了,不過吃多了可要防撐著。開啟c windows cookies 如果你的windows系統裝在別的資料夾下,則需做相應調整...

趨勢防毒的後遺症

2006年7月上旬,fdt的電腦爆發病毒,趨勢防毒後,所有的exe檔案都不能執行。雙擊後會彈出dos視窗,一閃及過。我也沒有能倖免。索性先研究一下 用ultra edit 等工具開啟正常的 exe檔案會發現 exe檔案均是以十六進製制 4d開頭。exe 檔案被修改以後,大家會發現檔案大小並未改變或者...