在 D 语言中,inout 表示传入的参数既可以被读取也可以被修改。在 swap 函数中,ab 都是 inout 类型,因此可以被修改。但是,函数中不能修改 inout 参数的引用,也就是不能修改 ab 的地址,只能修改它们指向的值。因此,如果尝试修改 ab 的地址,就会导致编译器报错提示 cannot modify 'inout' expression 'a'

代码示例:

void swap(inout int a, inout int b) {
    int tmp = a;
    a = b;
    b = tmp;
}

void main() {
    int x = 1;
    int y = 2;
    swap(x, y);
    writeln(x); // 输出 2
    writeln(y); // 输出 1
}

解释:

swap 函数中,ab 都是 inout 类型,这意味着它们的值可以被修改。在函数中,我们使用了一个临时变量 tmp 来存储 a 的值。然后,我们将 b 的值赋值给 a,并将 tmp 的值赋值给 b。这样,我们就交换了 ab 的值。

然而,我们不能尝试修改 ab 的地址,因为它们是 inout 参数。如果我们尝试这样做,编译器就会报错。

总结:

inout 参数允许我们修改传入参数的值,但不能修改参数的引用。如果试图修改参数的引用,编译器就会报错。

D语言 inout 参数报错:cannot modify `inout` expression `a` 解释

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

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