谢谢各位的意见
我会在逐一理解
目前有几个问题
最近比较被要求写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 都不要加(但这太偏颇了)
我自己是习惯都不加
以上
谢谢