→ loveme00835: 1. 差別在於需不需要 RTTI, 你要放 ref type 在角括 02/24 23:38
→ loveme00835: 裡, 當然就要加上 try-catch, 但指標轉型只要檢查回 02/24 23:39
→ loveme00835: 傳是不是 nullptr. 2. 你的 class "可以當" base 的 02/24 23:41
→ loveme00835: 時候, 就會透過 virtual dtor 和使用者講這件事, 不 02/24 23:41
→ loveme00835: 然頂多只能當 private base, 這算是一個協定, 懶得寫 02/24 23:42
→ loveme00835: 空的 virtual dtor 就用 = default 02/24 23:42
→ loveme00835: 除非是想透過 dynamic polymorphism 來擴充功能, 這 02/24 23:44
→ loveme00835: 意味著你的 base 裡有 pure virtual function, 不然 02/24 23:45
→ loveme00835: 不太需要這樣寫 02/24 23:46
→ loveme00835: 另外講一個設計問題, 通常 dynamic_cast 變多表示你 02/24 23:56
→ loveme00835: 的設計需要再重新檢視一下, 常見的現象是新增一個類 02/24 23:57
→ loveme00835: 別要改好多地方, 而這些地方都用了 dynamic_cast 02/24 23:57
→ loveme00835: static_cast 和 dynamic_cast 有各自的角色, 你會取 02/25 00:00
→ loveme00835: 捨表示還不清楚界線在哪 02/25 00:00
→ bluesoul: 只要有多型就該用dynamic cast 02/25 09:09
→ bluesoul: 2的話,簡單說是,都加,不然就是用final 02/25 09:09
→ lovejomi: @loveme: 1. 我比較不懂的是 static_cast不安全 02/25 22:27
→ lovejomi: 既然有安全的 為什麼不用(就算有RTTI又怎樣?) 02/25 22:27
→ lovejomi: 我知道好像可以compile option disable RTTI 但如果 02/25 22:27
→ lovejomi: enable的情況下, 會想刻意不用RTTI嗎? 02/25 22:28
→ lovejomi: 順帶一問 實務上auto&& = xx; 什麼時候會用auto&&? 02/25 22:29
→ lovejomi: 目前想不到use case 02/25 22:29
→ loveme00835: 所謂的「不安全」指的是「你以爲你知道你在做什麼; 02/25 22:57
→ loveme00835: 實際上卻不是」,而不是「某些東西就是禁忌,用了就 02/25 22:57
→ loveme00835: 是不對」。舉個例子如 LLVM 的 RTTI。auto&& 使用的 02/25 22:57
→ loveme00835: 情境有兩種:作為 r-value ref 或是 forwarding ref, 02/25 22:57
→ loveme00835: 前者用來延長物件 lifetime, 後者保留 arg 值的類型 02/25 22:57
→ loveme00835: 簡單說在你熟悉語言特性以前,寫的每一行都可能不安 02/25 23:15
→ loveme00835: 全 02/25 23:15
推 steve1012: rtti 比較expensive. 然後code裡面一堆dynamic cast 02/26 06:39
→ steve1012: 的確代表你的設計可能很有問題 02/26 06:39
→ loveme00835: 更正: auto&& 都會用於推導型別, 沒有特指 r-value 02/26 09:04
→ loveme00835: 的情形 02/26 09:04
→ lovejomi: auto&&會怎麼樣我很清楚 但我發現沒有使用他的情境 才 02/26 09:33
→ lovejomi: 請教再下一篇 02/26 09:33
→ lovejomi: 想知道有什麼情境用他是最好的 @@ 02/26 09:34
→ lovejomi: 另外clang tidy因為有warning,所以再想到底該不該修正 02/26 09:43
→ lovejomi: 這些東西 02/26 09:43
→ lovejomi: clang應該跟你說的llvm rtti有關係吧 02/26 09:44