呼叫msvcr和gcc編譯出現不一致的問題,二義性呼叫以及過載決議二者為什麼給出了不一樣的結果?

時間 2021-05-30 06:40:54

1樓:消失的無意識

gcc和msvc有很多實現上的偏差,甚至相同編譯器的不同版本行為也不一致!

個人最佳實踐,避免這個問題的根源

1,不要使用long,用std::int32,std::int64之類有明確行為的編譯器型別

2,使用模板做分派,使用避免出現過載+隱式轉換

2樓:breaker

以下回答可能並非真正原因,甚至可能有違標準,只是我的猜測。

該問題的關鍵是,long 變數 lg,是否能標準轉換(包括提公升)到 int 還是 double。以及都能(或不能)轉換時,哪個更(更不)合理。

Linux GCC x64 的 sizeof(long)=8; sizeof(double)=8; sizeof(int)=4。long 轉換為 int 會截斷。long 轉換為 double,考慮到 IEEE 754 雙精度浮點數的布局(52bit 尾數部分/有效數字),會有精度丟失。

這兩個「不合理」,沒有乙個比另乙個「更不合理」——隱式轉換,編譯器無法獲得更多使用者的意圖,所以,編譯器無法決定,二義性報錯。

MSVC x64 的 sizeof(long)=4; sizeof(double)=8; sizeof(int)=4。long 轉換為 int 是位元準確的相同。long 轉換為 double,也不會有精度丟失。

這兩個都「合理」,但是第乙個保持著整數性質且位元相同,第乙個是「更合理」的。所以,編譯器選擇了向 int 轉換的版本。

關於帶孩子的問題,我和婆婆總是不一致怎麼辦?

Zhangjing 一致的時候和不一致的時候都聽你的。你才是孩子的監護人,孩子的一切問題都由你和你老公做主。你婆婆但凡是個腦子清楚的,他就不應該發表意見。 錦屏 道理呢肯定是誰帶聽誰的,不帶娃就最好不要指手畫腳。最好就是讓你老公去和婆婆說,也不用刻意說,她再 指導你 的時候讓你老公開玩笑的口氣說一句...

大家都是如何和作息不一致的舍友相處的?

凌玖 首先跟室友溝通啊,在各自睡覺時都保持安靜,互不打擾。其次,買耳塞跟遮光眼罩也能很大程度上減小她們的影響。如果實在不行,只有換宿舍和租房子。但這個是下下策,還是能忍就忍吧 首先她們睡覺的時候你要保持安靜,然後你休息的時候你就告訴他們上次你們休息我都很安靜,你們可不可以安靜一點?如果開燈你就買乙個...

為什麼《長安十二時辰》中的配音會出現不一致的情況?

因為這部劇大量採用的是同期聲,碰到同期台詞沒法使用的情況 底噪太大,有雜音等等 或者後期需要改台詞的時候就需要配音。大家感受到配音和同期不一致一般會有幾個原因 1 演員檔期問題,沒法到錄音棚配音,就找個安靜的地方用手機錄了傳給後期公司。這種配音的音質一般比較差,很難做和同期的匹配工作。當然。實在要努...