inout是dmd2中的一个类型构造器,用于将多个只有参数可变性和返回类型可变性不同的函数合并成一个函数。例如,对于以下的函数重载:

int[] slice(int[] a, int x, int y) { return a[x .. y]; }

const(int)[] slice(const(int)[] a, int x, int y) { return a[x .. y]; }

immutable(int)[] slice(immutable(int)[] a, int x, int y) { return a[x .. y]; }

它们的函数体都是相同的,只是参数和返回类型的可变性不同。使用inout类型构造器可以将它们合并成一个函数:

inout(int)[] slice(inout(int)[] a, int x, int y) { return a[x .. y]; }

inout关键字相当于一个通配符,可以代替mutable、const、immutable、inout或inout const。调用函数时,返回类型的可变性会根据传递给inout参数的参数类型而改变。

inout也可以在一个带有inout参数声明的函数中作为类型构造器使用。使用inout声明的类型的可变性会根据传递给inout参数的参数类型而改变。

inout类型可以隐式转换为const或inout const,但不能转换为其他类型。在@safe函数中不允许进行inout的强制类型转换。

总之,inout是dmd2中一个用于简化代码的类型构造器,可以将多个函数合并成一个函数,减少重复代码

Functions that differ only in whether the parameters are mutable const or immutable and have corresponding mutable const or immutable return types can be combined into one function using the inout typ

原文地址: https://www.cveoy.top/t/topic/eTn7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录