Zero initialization
От: Videoman Россия https://hts.tv/
Дата: 05.09.21 11:56
Оценка:
Возьмем какой-нибудь POD тип T для которого явно не запрещен, но и не определен конструктор по умолчанию. Тогда в объявлении мы можем либо инициализировать тип нулями, либо нет:
T a;    // Нет никакой инициализации
T a();  // Инициализируем нулями
T a{};  // Инициализируем нулями
Теперь допустим, что я хочу определить конструкторы, в том числе и конструктор по умолчанию, но который не должен инициализировать члены класса T, например:
class T
{
    T() {}
    T(const T& that) = default;
    T(T&& that) noexcept = default;
    // ...
}
Теперь если смотреть на все это в контексте какого-нибудь шаблонно метода, то как я понимаю, мы не можем обеспечить такое-же поведение по умолчанию:
template <typename type_t>
type_t func()
{
    type_t a;   // Тут не происходит инициализации и в случае любого другого POD и в случае T
    type_t b(); // А вот тут в случае POD происходит инициализация нулями, а в случае T её нет ???
}

Как быть в таком случае и обеспечить однообразное обобщенное поведение ? По идее, в шаблонном методе можно написать что-то типа: type_t a(0), но тогда все типы должны будут иметь конструктор который принимает 0. Вопрос к знатокам, как правильно разрулить такую ситуацию?
http://www.gravatar.com/avatar/60560936caa07b944d4c3cecf1c06cc5?s=80&d=identicon
Отредактировано 05.09.2021 11:57 Videoman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.