看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《legnaleurc (CA)》之銘言: : 剛剛重新翻了一下 C++ Coding Standard : 裡面有一條是說,在模組邊界如果使用std::string : 等class的話,會導致跟它接的模組也要用同一個實作品 : 用相同選項編譯,因此若為了可攜性要盡量使用低階型別 首先,C++ 沒有規定 name mangling 的方法 (即 function/variable name 對應到 object file symbol 的方式) 也沒有規定物件中的 virtual table 應該要怎麼擺 所以如果你的程式去連結不同 compiler 生出來的 library 輕則 linking error 重則 runtime error 通常不會有好下場 因此一但你選擇 C++ 開發程式 則它用到的 library 都必需用同樣的 compiler 來編 如此也可以保證這些 library 都使用同樣的 std::string 實作品 : 但是它又鼓勵使用如std::tr1::shared_ptr的資源管理物件 : 來傳遞給其他DLL,這不就代表客戶也必須要使用同一份實作? 是的 這世界並不美好 : 是否這是在"可攜性"和"正確刪除物件"之間的取捨? 如果你需要跨 compiler 的可攜性 光是「盡量使用低階型別」還不夠 事實上不要用 C++ 才能達到跨 compiler 的可攜性 (而且如 zxvc 所說,即使用 C 還是很容易踩到地雷) 大部份的情況我還是會用 C++ 啦 我寧可花時間重編 library 也不要花時間 debug -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.113.79 ※ 編輯: littleshan 來自: 59.121.113.79 (04/02 23:45)
tsaiminghan:我對compiler運作不了解,所以差別是在lib跟dll無關? 04/02 23:47
legnaleurc:問題應該是在ABI沒統一,所以實際上還是要發佈 04/03 00:30
legnaleurc:所有相關的模組 .... 這世界真的很不美好= = 04/03 00:30