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

2019-03-30  本文已影响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 以及参数的类型,是分不清 可变参的界限的,但是那样处理的效率很低下,所以编译器不允许这样的事情出现。

上一篇下一篇

猜你喜欢

热点阅读