gpt4 book ai didi

c++ - C 与 C++ 对象的静态初始化

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:22 25 4
gpt4 key购买 nike

我有一个关于相当大的静态数据集初始化的问题。

请参阅下面我的三个初始化静态数据集的示例。我想了解下面显示的方法对程序加载时间和内存占用的影响。我现在真的不知道如何评价我自己。我的构建环境仍然在使用 Visual Studio 的桌面上,但是嵌入式目标将使用 GCC 为 VxWorks 编译。

传统上,我使用基本的 C 结构来处理这类事情,尽管有充分的理由将这些数据移动到 C++ 类中。嵌入式应用程序不赞成动态内存分配,因此应尽可能避免。

据我所知,初始化 C++ 类的唯一方法是通过其构造函数,如下面的方法 2 所示。我想知道这与方法 1 相比如何。在 ROM(程序)方面是否有明显的额外开销footprint), RAM (Memory Footprint), 或者程序加载时间?在我看来,编译器可能能够优化相当琐碎的构造函数,但我不确定这是否是常见行为。

我列出了方法 3,正如我所考虑的那样,尽管这似乎是个坏主意。我还缺少其他东西吗?还有其他人以类似的方式初始化数据吗?

/* C-Style Struct Storage */
typedef struct{
int a;
int b;
}DATA_C;

/* CPP Style Class Storage */
class DATA_CPP{
public:
int a;
int b;
DATA_CPP(int,int);
};
DATA_CPP::DATA_CPP(int aIn, int bIn){
a = aIn;
b = bIn;
}

/* METHOD 1: Direct C-Style Static Initialization */
DATA_C MyCData[5] = { {1,2},
{3,4},
{5,6},
{7,8},
{9,10}
};

/* METHOD 2: Direct CPP-Style Initialization */
DATA_CPP MyCppData[5] = { DATA_CPP(1,2),
DATA_CPP(3,4),
DATA_CPP(5,6),
DATA_CPP(7,8),
DATA_CPP(9,10),
};

/* METHOD 3: Cast C-Struct to CPP class */
DATA_CPP* pMyCppData2 = (DATA_CPP*) MyCData;

最佳答案

在 C++11 中,你可以这样写:

DATA_CPP obj = {1,2}; //Or simply : DATA_CPP obj {1,2}; i.e omit '='

代替

DATA_CPP obj(1,2);

扩展这个,你可以写:

DATA_CPP MyCppData[5] = { {1,2},
{3,4},
{5,6},
{7,8},
{9,10},
};

而不是这个:

DATA_CPP MyCppData[5] = { DATA_CPP(1,2),
DATA_CPP(3,4),
DATA_CPP(5,6),
DATA_CPP(7,8),
DATA_CPP(9,10),
};

阅读统一初始化。

关于c++ - C 与 C++ 对象的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23099853/

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