170 похожих чатов

Разве в move конструкторе [1] не должно возникнуть противоречие, в

результате чего должен выбраться generated noexcept вместо defined?
template <typename T>
class A
{
T v;
public:
A() = default;
A(const A&) = default;

//A(A&&) = default;
A(A&&) noexcept(false) = default; [1]

A& operator=(const A&) = default;
A& operator=(A&&) = default;
};


int main()
{
std::cout << std::boolalpha;
std::cout << std::is_nothrow_move_constructible<A<std::string>>::value << '\n'; // false
}

9 ответов

17 просмотров

так он не генерируется в этом случае

А скажи, какой смысл в move для такого класса, что он будет перемещать?

Aleksandr-Bazhenov Автор вопроса
Егор (Дима)
так он не генерируется в этом случае

не понял ответ. У класса один член - std::string. У std::string move-конструктор noexcept. Следовательно если написать в классе A(A&&) = default, то у класса A move-конструктор так же будет noexcept. Теперь я пытаюсь явно переопределить это, используя conditional noexcept(false). И это работает. Но мне не понятно почему. Так как я прочитал, что если они противоречат, то выбор падает в пользу generated noexcept, а generated в свою очередь смотрит на все свои члены и если у всех move-конструктор noexcept, то и у класса будет noexcept.

Aleksandr Bazhenov
не понял ответ. У класса один член - std::string. ...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Aleksandr-Bazhenov Автор вопроса
Ilya Zviagin
А скажи, какой смысл в move для такого класса, чт...

я просто пытаюсь поглубже понять как это устроено

Aleksandr Bazhenov
не понял ответ. У класса один член - std::string. ...

Вроде noexcept на default вообще вешать нельзя. У меня по крайней мере компайл тайм ошибки были на кланге

Aleksandr-Bazhenov Автор вопроса
Слава
Вроде noexcept на default вообще вешать нельзя. У ...

можно. я же показал, что вывод false в main

Aleksandr-Bazhenov Автор вопроса
Ilya Zviagin
Я тоже...

тут может я как-то не правильно трактую слово "contradict" вот в этом тексте (C++ Move Semantics. Nicolai M. Josuttis). When you have a defaulted special member function you can explicitly specify a different noexcept guarantee than the generated one. For example: class C { ... public: C(const C&) noexcept = default; // guarantees not to throw (OK since C++20) C(C&&) noexcept(false) = default; // specifies that it might throw (OK since C++20) ... }; Before C++20, if the generated and specified noexcept condition contradict, the defined function was deleted.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта