gpt4 book ai didi

d - 表达式是否忽略不可变/常量?

转载 作者:行者123 更新时间:2023-12-02 20:29:43 27 4
gpt4 key购买 nike

我正在使用函数模板 void _createAttr(T)(args..., in T[]) 并使用 测试 T 的类型函数中的 static if(is(T == char)) 。当我打电话时,

_createAttr!char(args...,"someString")
_createAttr(args...,"someString")

编译器从不提示。

我当然知道alias string = immutable(char)[]。因此,在第一次调用中,T 的类型和提供的参数不匹配,但 in 修饰符应该解决这个问题。在第二种情况下,它应该推断出T = immutable(char)。据我了解, immutable(char)char 是不同的类型,但编译器在第二种情况下通过了 is 测试。

编译器(DMD)在进行 is 测试时似乎忽略了字符串中字符的不可变性。

我在 dlang.org 或《D 编程语言》一书中找不到对此行为的任何解释。

这是编译器错误吗?

最佳答案

没有错误,它只是将 in 限定符扩展为 const,这对于 immutable(char) 都同样有效>char,因此编译器只实例化它一次。

如果T == char,则in T[]表示const char[],它涵盖了这两种情况,因此模板永远不需要考虑不变性。您还可以将可变字符串传递给该函数,不会出现任何问题。

如果您明确执行!(immutable(char)),那么它将使用它,并且不再接受可变的。

关于d - 表达式是否忽略不可变/常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com