Аналогичны ли два этих конструктора?
struct Test
{
int i;
int j;
};
class Fcn
{
Test test;
public:
Fcn()
{
memset(&test, 0 , sizeof(test));
}
};
и
class Fcn
{
Test test;
public:
Fcn(): test{}
{
}
};
Ведь по-сути компилятор вставляет тот же самый memset во втором случае. Или нет?
В данном конкретном случае - да, ибо memset(..., 0, ...)
для целочисленных типов гарантирует корректную нулевую инициализацию.
В общем случае - нет (даже если не рассматривать типы с нетривиальной конструкцией), ибо, например, для указательных, плавающих и некоторых других типов в общем случае не гарантируется корректной нулевой инициализации через memset(..., 0, ...)
.
Пример, демонстрирующий разницу для многих популярных реализаций может выглядеть так
struct Test
{
int Test::*i;
int Test::*j;
};
т.к. нулевое значение указателя-на-член-данное обычно представляется битовым набором 0xFF...F
, а не нулевым набором битов.
Также следует принять во внимание замечание @VladD об инициализации паддинга.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В целом, я даже не уверен ещё правильно ли освобождаю память, и освобождается ли она вообщено на запуске дебаггер ругается именно на этот...
Имеется класс MyClass, разумеется с конструктором, нужно создать вектор умных указателей на объекты этого классаСам указатель создается, но при...
Здравствуйте, мне не хватает стандартной функции required для input сейчас мне надо сделать следующее