假设我有一个POD C结构:

struct Example {
    int x;
    int y[10];
    int yLen;
}
使用以下代码,该程序无法编译:
Example test() {
    int y[10];
    int yLen = 0;

    auto len = this->getSomethingLength();
    for (int i = 0; i < len; i++) {
        y[yLen++] = this->getSomething(i);
    }

    return Example{ 0, y, yLen };
}
但是,执行return {0, {}, 0};似乎可以编译。问题是,在提前进行某种逻辑之前,我不知道y的大小。在int y[10]{}中初始化test似乎没有什么不同。我知道这似乎是一个非常简单的问题,但是我似乎找不到任何有效的方法。

最佳答案

声明整个结构而不是其各个部分,然后对其进行初始化:

Example test() {
    Example result;

    auto len = this->getSomethingLength();
    for (result.yLen = 0; result.yLen < len; result.yLen++) {
        result.y[result.yLen] = this->getSomething(result.yLen);
    }

    return result;
}
在知道大小的情况下,将y声明为int*并使用new分配内存将是一个更好的解决方案。

08-16 01:23