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,匹配函数成为重载集,选择最佳匹配.
参数名,会成为函数接口的一部分.无参数名,则用户不能加上参数名.与统调不会冲突.

posted @ 2020-11-18 16:24  zjh6  阅读(26)  评论(0)    收藏  举报  来源