Как разрешение перегрузки выбирает из нескольких потенциальных деструкторов?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешение перегрузки выбирает из нескольких потенциальных деструкторов?

Сообщение Anonymous »

После просмотра этого поста: < /p>
Если в классе есть деструктор, объявленный с необходимым пунктом, который оценивается на ложь, почему класс не тривиально разрушаем? class = "lang-cpp prettyprint-override">

Код: Выделить всё

#include 

template
class Optional
{
public:
~Optional() requires (!std::is_trivially_destructible_v);

};

#include 
int main()
{
const char* bool_value[] = {"false", "true"};

bool is_trivial = std::is_trivial_v;
bool is_trivial_destructable = std::is_trivially_destructible_v;

std::printf("std::is_trivial_v = %s\n", bool_value[is_trivial]);
std::printf("std::is_trivial_destructable = %s\n", bool_value[is_trivial_destructable]);
}
и его вопрос:

Почему ~ optainal () требует (false) сделать класс необязательным нетривиальным? class = "lang-cpp prettyprint-override">

Код: Выделить всё

~Optional() requires (!std::is_trivially_destructible_v);
~Optional() = default;
Вот подготовка к моему вопросу ...
Предполагая, что шаблон создается экземпляром, а ограничение требуется , что означает, что будет 2 предполагаемых деструктора, правильные? Согласно стандарту C ++ в [class.dtor] < /code>: < /p>

В конце определения класса разрешение перегрузки выполняется среди проспективных деструкторов, объявленных в этом классе с пустым списком аргументов, чтобы выбрать Destructor для Class>, также известный как отбор Destructor. не удас.

Код: Выделить всё

[basic.def.odr]
) из выбранного деструктора и, в частности, выбранного деструктора может быть удален (

Код: Выделить всё

[dcl.fct.def.delete]
).

Итак, мой вопрос: как разрешение перегрузки решает, какой проспективный деструктор становится выбранным деструктором, если есть несколько из них? /> < /li>
Проспективные деструкторы в c ++ < /p>
< /li>
< /ul>
Но они не отвечают на мой вопрос. Принятый ответ на 1 -й гласит: < /p>

какое объявление деструктора выживает, определяется позже, согласно части указанного вами стандарта. Решение для перегрузки требует замены шаблонов на все «будущие деструкторы». Это вызывает любые такие деструкторы, чьи требуют положения не исчезнут. Если этот процесс решается до одного деструктора, то это фактический деструктор. и если он разрешается несколькими деструкторами, то код плохо образуется. Или разрешение перегрузки считает, что одно «лучше», чем другое? Я что -то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/797 ... estructors
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»