美文网首页
golang 类型... 只能作为最后一个参数

golang 类型... 只能作为最后一个参数

作者: 不要重不要重 | 来源:发表于2019-03-30 18:41 被阅读0次
    func (filter *Filter) AddWord(words ...string, db bool) error
    

    定义错误,必须如下

    func (filter *Filter) AddWord( db bool,words ...string) error
    

    原理大概如同c++ 的不变参,不知道什么时候是最后一个参数。
    详情:
    EBP/ESP 寄存器
    EBP 栈底地址寄存器
    ESP 栈顶地址寄存器
    //当调用一个函数的时候,先多之前的EBP/ESP 进行上下文保存,然后系统开辟一块新的固定栈空间,然后EBP指向栈底,ESP也指向栈底,ESP随着 push/pop而增大减小,周而复始。

    //接着来看,参数的压栈和出栈顺序,
    压栈是从参数列表的右边开始的,出栈则相反
    这也为 可变参提供了有力的依据,
    出栈的时候,可变参必须放在最右边,并且只允许有一个
    因为如果不去对比,ebp和esp 以及参数的类型,是分不清 可变参的界限的,但是那样处理的效率很低下,所以编译器不允许这样的事情出现。

    相关文章

      网友评论

          本文标题:golang 类型... 只能作为最后一个参数

          本文链接:https://www.haomeiwen.com/subject/cdpsbqtx.html