首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >初始化包含固定大小数组的C++结构

初始化包含固定大小数组的C++结构
EN

Stack Overflow用户
提问于 2020-07-24 11:42:58
回答 2查看 63关注 0票数 2

假设我有一个POD C结构:

代码语言:javascript
运行
复制
struct Example {
    int x;
    int y[10];
    int yLen;
}

使用以下代码,程序无法编译:

代码语言:javascript
运行
复制
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的大小,除非提前做一些逻辑运算。在test中初始化int y[10]{}似乎没有什么不同。我知道这似乎是一个非常简单的问题,但我似乎找不到任何有用的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-24 11:49:58

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

代码语言:javascript
运行
复制
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分配内存将是一个更好的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2020-07-24 12:06:10

Example中声明构造函数

代码语言:javascript
运行
复制
struct Example {
    int x;
    int y[10];
    int yLen;
    Example(int xNew, int *yNew, int yLenNew)
    {
        x = xNew;
        yLen = yLenNew;
        for (int i = 0; i < yLenNew; i++)
        {
            y[i] = yNew[i];
        }
    }
};

并像这样使用它:

代码语言:javascript
运行
复制
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 );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63066454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档