Пример тривиального класса с более чем одним конструктором по умолчанию? - PullRequest
4 голосов
/ 06 августа 2020

§13 стандарта C ++ 17 говорит:

" Тривиальный класс - это класс, который легко копируется и имеет один или несколько конструкторов по умолчанию (15.1), каждый из которых либо тривиальны, либо удалены, и по крайней мере один из них не удален . "

Мне не удалось найти хороший пример тривиального класса, для которого такая формулировка имеет смысл. Для чего нужна часть «хотя бы один, который не удален» ?. Может ли набор конструкторов тривиального класса содержать более одного «не удаленного» конструктора по умолчанию? Если да, то такие «не удаленные» конструкторы должны быть тривиальными (согласно вышеприведенной формулировке), но это кажется невозможным.

1 Ответ

2 голосов
/ 06 августа 2020

Пример:

struct Foo
{
    Foo() = default;          // #1  default constructor, trivial, not deleted

    template <class... Args>
    Foo(Args...) = delete;    // #2 default constructor, deleted
};

static_assert(std::is_trivial_v<Foo>);

auto test()
{
     Foo f{}; // OK
}

имеет один или несколько конструкторов по умолчанию

Оба # 1 и # 2 являются конструкторами по умолчанию (см. [Class.default.ctor] )

все они либо тривиальны, либо удалены

# 1 тривиально, # 2 удалено

и хотя бы одно из который не удаляется

# 1 не удаляется

[class.default.ctor]

Конструктор по умолчанию для класса X - это конструктор класса X, для которого каждый параметр, не являющийся пакетом параметров функции, имеет аргумент по умолчанию (включая случай конструктора без параметров). [...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...