dip:添加抛作为函数属性与命名参数
加抛来表示不抛的逆.因为不抛作为默认更好,用在模块顶时,如果有要抛的函数,就需要这个抛了.因为异常成本大,所以默认不抛才是最经济的,即不需要异常的开销.抛属性仅对函数/闭包有用.
void bar() throw;
struct S1 {
nothrow void foo() { bar(); } //错误,不允许抛
}
struct S2 {
void foo() { bar(); } // 可抛
}
抛与不抛不能混用,但一个管区间,一个管一个时可以.
void abc() throw throw; // 错误
void bar() throw nothrow; // 错误
nothrow:
foo() throw; // 好
throw:
def() nothrow; // 好
主要是c++用户基本上不用异常,或者很少.
命名参数的主要目的是,如果一堆参数的话,那么每个都可以带个合理的默认值,然后用户只需要提供有意义的就行了.当然重排顺序是附带的.避免所有默认都在最后.默认一个,就要默认所有.
同样,也离()类似函数来初化结构更近了.
主要是d已在构/数组/关联数组上有命名参数了.匹配时类似赋值构的字段.对函数/函数指针/闭包.命名参数:
1,有标识符,则匹配标识符,无,则错误.
2,无标识符,则跟着上一个匹配后走,如无上个匹配,则为第1个.
3,多次匹配参数是错误.如果参数列表中的命名参数消耗完了,剩余参数接收默认值,如果有非默认值,则错误.
4,多余的参数,匹配....不允许标识符.
5,匹配函数成为重载集,选择最佳匹配.
参数名,会成为函数接口的一部分.无参数名,则用户不能加上参数名.与统调不会冲突.
浙公网安备 33010602011771号