1

例如,我想用这个签名编写一个函数:int foo(char[])并使用char[5] x; foo(x).

目前我收到一个编译错误,指出 char[] 与 char[5] 不同。

我想写:int foo(uint SIZE)(char[SIZE])但是我必须在调用 foo: 时显式设置长度foo!5(x),例如之前的示例。

编辑:你们是对的,我的函数实际上看起来像foo(ref char[])我已经声明了它@nogc。我想要做的是用数据填充给定的静态数组。从更广泛的意义上说,我正在尝试实现一个退化format函数,因为标准库肯定在使用 GC,而我不能从我的其他非 GC 代码中调用它。对此也有任何想法吗?

4

1 回答 1

2

char[] 确实char[5] 不同,但由于隐式转换,没有什么能阻止您将静态数组作为参数传递给具有 char[] 参数的函数。

例子:

module so.d26013262;

import std.stdio;

int getSize(int[] arr) {
    return arr.length;
}

void main(string[] args) {
    int[5] starr;
    int[] dyarr = [1, 3, 2];

    writeln(getSize(starr));
    writeln(getSize(dyarr));
}

输出:

5
3

我的猜测是您在其他地方遇到错误...

于 2014-09-24T14:10:08.797 回答