C 自動型別轉換導致的微妙錯誤

2021-06-03 14:52:21 字數 505 閱讀 8970

vector_t(float ax=0.0f, float ay=0.0f,float az=0.0f):

x(ax),y(ay),z(az){}

...vector_t v1,v2;

...v = v1 * 10.0f;

上述紅色語句竟然通過編譯了,仔細檢查也沒發現相符的運算子過載。

通過除錯發現有一次建構函式的呼叫,這才想起來c++的自動型別轉換。

差筆記得:

編譯器希望乘號右邊是乙個vector_t物件,並會想辦法把浮點型轉換成乙個vector_t物件,

所幸的是有乙個建構函式知道該怎麼做,於是編譯器生成了乙個臨時物件,並用10.0f作為它的引數。

解決方法:

一:使用explicit來宣告禁止這種轉換。

二:增加乙個預設建構函式來完成零初始化,並取出**中建構函式的預設引數。

紅色**的本意是用乙個常數放大乙個向量,結果卻成了與向量(10,0,0,)計算叉乘了。

No 5 型別轉換導致的錯誤

注意 程式語言只是我們與計算機交流並讓計算機實現我們創造性思想的工具,可以並鼓勵深入掌握一門語言,但千萬別沉迷於鑽某種語言的牛角尖,一定要把握好二者間的度 本帖屬不定時 貼,以試卷的形式提出乙個比較基礎的問題供大家思考討論,問題的解析將在下一更新貼中一併給出,這樣做是希望還不清楚問題的朋友有自己思考...

C 自動型別轉換

在c 中,如果編譯器看到乙個表示式或函式呼叫使用了乙個不合適的型別,它會執行乙個自動型別轉換,將不合適的型別轉換為合適的型別。對於自定義類,可以通過定義該類的建構函式的方法將其它型別轉換為本自定義類 或者使用運算子將本自定義類轉換為其它型別。對於乙個自定義類,可以為該類定義乙個有乙個引數的建構函式。...

C語言 資料型別轉換導致讀取引數錯誤

乙個資料結構定義如下 typedef struct my struct 然後定義一函式介面,本意是對my struct中的int型別和string進行讀取,這裡函式介面的作者忽視了unsigned char,視為int型別 get my struct data my struct pd ata,ch...