我正在研究 C++,我有一个结构最多 100 float
它里面的变量,我要去initialize
他们的值(value)0
在没有参数的构造函数中,那么哪种方式更快?
类型 1:
struct info
{
//no argument constructor
info();
float x1;
float x2;
.
.
.
float x100;
}Info;
info::info()
{
float x1 = 0;
float x2 =0;
.
.
.
.
.
float x100 = 0;
}
//creation
Info* info1 = new Info();
类型 2:
typedef struct info
{
float x1;
float x2;
.
.
.
.
float x100;
}Info;
Info* infoIns = new Info;
memset(infoIns,0,sizeof(Info));
最佳答案
一百个名为 x1 .. x100 的变量只是调用一个数组(或者如果数字不同,可能使用 vector )
在这种情况下,std::fill(x, x+100, 0.0f)
可能会击败上述所有选择。
更好的解决方案可能是只初始化整个对象:
Info* infoIns = new Info();
或
Info infoIns = {}; // C++11
或
Info infoIns = Info();
只要是性能问题,唯一适用的答案就是“您可以衡量什么”。我可以坐在这里解释为什么根据我的经验,在我的机器(或我的机器)上,方法 A 比方法 B 或方法 C 更快。但是如果您使用不同的编译器,或者有不同的处理器,那可能不适用完全是因为您使用的编译器正在做一些不同的事情。
无论哪个“更快”,您都应该使用构造函数将值设置为零。如果你想使用 memset
,那么一定要这样做,但要在构造函数内。这样一来,您就不会在代码中找到某个地方,您在尝试使用它之前忘记将其中一个结构设置为零。请记住,使用 memset
将结构/类设置为零是非常危险的。如果类或结构具有虚拟成员函数(或包含某些具有虚拟成员函数的对象),这很可能会覆盖描述虚拟函数的 VPTR。那是一件坏事。因此,如果您想使用 memset,请将其与 x1
一起使用,大小为 100 *sizeof(float)
(但再次使用数组可能是更好的选择)。
关于c++ - 在 C++ 结构创建中执行更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485310/