謝謝各位的意見
我會在逐一理解
目前有幾個問題
最近比較被要求寫exceptional 的code
假設我寫
string Foo(string s) noexcept
{
auto a = Get(); // noexcept
string r = s+a;
return r;
}
然後我確認operator+是不是noexcept
結果當然不是
變成我要為了這簡單的+
寫一個try catch...去handle exception
三個抉擇點
1. 不要標註noexcept , 反正壞了上面該處理 無責聲明 (我prefer這)
2. try catch(type1) catch(type2) catch(...) 把所有查的到的exception都handle
要不要分開handle 是by design
3. 就現在這樣寫 反正真的發生bad_alloc 我也無能為力 terminate吧
以上有沒有什麼比較建議的做法可以討用在多數情形
現在變成想提供noexcept 函數 都要查每一行function call是否都是noexcept
反而覺得 預設不該noexcept 才合理 有需求才標註noexcept
==================
一個很無聊的const問題
古早的effective c++推廣 能加const就加
所以這位同事當然遵守
void Foo(const int a)
{
auto const rc = Win32();
auto const hr = COM();
auto const error = 3rdAPI();
...
}
我認同const能確保不被亂改
但我其實是覺得很多餘
local變數改了也不會怎樣(也不該怎樣)
甚至會被改表示你有需求 搞不好還會因此改code拿掉const
問題來了
他今天看到某同事
void Bar(const string s){// read-only }
留言 這是多餘的 要拿掉
對我來說當然不該補const 裡面如果以後有copy需求 就不能move了
但我反倒覺得他兩套標準
這case只有read加上const不正是他遵守的鐵則嗎?
也可以Bar(RVALUE); 為啥這情況他認為"useless"? 雙重標準的感覺
我沒看到他針對函數local non-trivial變數的寫法
也許也是不加const為主 (也是雙標)
這邊的問題就是
盡可能const 這件事如果套用在modern C++ 有沒有什麼common的標準用法呢?
我比較主觀的歸納是
primitive type能const就const
non-trivial type 都不要加(但這太偏頗了)
我自己是習慣都不加
以上
謝謝