C_and_CPP 板


LINE

※ 引述《lovejomi (JOMI)》之銘言: : 這篇推文有些確實讓我不太理解 另開這篇問一下 : "所以 pass by value 的情況下不用加上 const 的原因是 : 使用者只有執行函式的執行緒, 所以要求行為一致是沒有意義的" : 這句話我真的不太理解 : const跟 thread有什麼關聯? : 意思是說 都已經複製了 : 裡面不管怎麼使用這物件 R/W : 外面就算有其他thread 不管做什麼都已經跟這複製的物件無關了 : 所以const就沒意義 在函式參數裡加 const 是 caller 需要給 callee 的保證, 在下面 的程式碼裡開了兩條 thread, 其中一條看到的是 ref to const 但 連印兩次値都不一樣, 這就違反語意上的 constness (行為一致) 範例: https://wandbox.org/permlink/ywp3TcVYkHrVe3J6 pass-by-value 加上 const specifier 只是語法接近, 但它完全和 caller 的責任無關, 所以是沒意義的 : ====================== : "const 不是為了避免修改, 而是要求物件的行為 consistent" : 這邊的consistent 我沒有很深刻的感受 這邊能多提供一些資訊嗎? : 另一個觀點 : 如果對方沒有你這些認知 完全單純覺得 const就是語法上的不能修改 : 他才會有 : void Foo(int a) 留言要+ const : void Foo(const string a) 留言覺得const useless : 講到這邊都覺得有點矛盾了 : 如果不能修改 那const string a他不應該有意見.... : 所以我才推論他只有 primitive + const, non-trivial的就不加 : 這邊我想問 如果要說服他或是把你這串觀念用英文表達 有沒有文章說這呢? : ===================================== 就像我說的: const 是行為的保證. 你不能改變外顯行為的根本原 因是可用的介面被限縮了. 不需要糾結語法應該如何, 而該去思考 語意夠不夠精確. : "需要 noexcept 的情況全用 noexcept(bool) 來決定" : 這邊可否給我一些例子 我比較能理解用法 : void XD(string a) noexcept(std::is_nothrow_move_constructible<string>::value) : { : } : 當我寫出這行時 我自己都不知道自己在幹嘛了 : 1. a不見得是by move 那by copy怎麼辦? 一般來說把敘述複製進 noexcept() 運算子就好, 建構子的判斷也 是大同小異: struct From {}; struct To { To(From&&) noexcept { } To(const From&) { } }; void foo(From from) noexcept( std::is_nothrow_constructible_v<To, decltype((from))> ) {} 以上是測試直接把參數 (lvalue ref) 丟進建構子的情況 (注意 decltype 裡有多一層括號), 改成 std::move(from) 就可以測試另 外一版建構子. : 2. 假設走by copy......這個XD函數 可能exception會發生在 參數傳遞時的呼叫... : 這是不是表示 這函數已經不可能是noexcept了? 函式本身還是 noexcept, 但是呼叫敘述是不是 noexcept 取決於編 譯器 resolve 到的建構子版本: void bar(std::string) noexcept; std::string s; static_assert(noexcept(bar(s))); // assertion failure static_assert(noexcept(bar(std::move(s)))); : 3. 因為缺乏noexcept(bool)這用法上的經驗, 實在很難理解 : 雖然我不知道 exception specification為什麼被deprecated, 但沒了他 : 我怎麼知道這函數丟什麼exception? 如果他沒寫document 我根本無從得知 對吧? : 當我在設計virtual function() 這時候 noexcept就已經要決定true or false了. : 當決定了 derived 就被鎖死了, 這邊又讓我覺得 interface上限定noexcept似乎太硬了 : stackoverflow當然有一些方法 例如寫兩版 : 但我覺得這只是在找workaround沒有很能接受 : 以上 : 謝謝 因為實務上很難保證原本的 noexcept 性質, 而且能加上 noexcept 修飾符的通常是很簡短的函式 (拿來測試參數居多), 所以我覺得可 以不加. -- P1389R0: Guidelines for Teaching C++ to Beginners https://bit.ly/2GvDWKb SG20 Education and Recommended Videos for Teaching C++ https://www.cjdb.com.au/sg20-and-videos --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.76.216 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1589389460.A.D61.html ※ 編輯: poyenc (123.193.76.216 臺灣), 05/14/2020 02:00:30
1F:推 F04E: 05/15 08:38
2F:推 lovejomi: 以上是測試直接把參數 (lvalue ref) 丟進建構子的情況 05/17 00:22
3F:→ lovejomi: 這邊不懂,實際情緒我無法得知caller到底走move or copy 05/17 00:22
4F:→ lovejomi: 所以還是要and起來不是嗎? 05/17 00:22
5F:→ lovejomi: 錯字:情“形” 05/17 00:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP