std::is_pod可能会在C++ 20中弃用.
这个选择的原因是什么?我应该用什么来代替std::is_pod知道某种类型是否真的是POD?
我有一个结构,需要初始化它的对象std::fill.
typedef struct _test
{
char name[32];
char key[4];
int count;
}test;
Run Code Online (Sandbox Code Playgroud)
截至目前,我正在使用memset.我需要改成它std::fill.我在下面尝试过,但std::fill抛出了结构对象的编译器错误.
test t;
char a[5];
std::fill(a, a + 5, 0);
std::fill(t, sizeof(t), 0);
Run Code Online (Sandbox Code Playgroud)
注意:我不想用这种方式初始化. char a[5] = {0};
昨天我读了一些同事的代码并发现了这个:
class a_class
{
public:
a_class() {...}
int some_method(int some_param) {...}
int value_1;
int value_2;
float value_3;
std::vector<some_other_class*> even_more_values;
/* and so on */
}
a_class a_instances[10];
void some_function()
{
do_stuff();
do_more_stuff();
memset(a_instances, 0, 10 * sizeof(a_class)); // <===== WTF?
}
Run Code Online (Sandbox Code Playgroud)
这是合法的(WTF线,而不是公共属性)?对我来说它闻起来真的非常糟糕......用VC8编译时代码运行正常,但是在调用时用VC9编译时会抛出"意外异常" a_instances[0].event_more_values.push_back(whatever),但访问任何其他成员时.任何见解?
编辑:将memset从更改memset(&a_instances...为memset(a_instances....谢谢你指出Eduard.
EDIT2:删除了ctor的返回类型.谢谢你.
结论:谢谢大家,你证实了我的怀疑.