Почему я должен быть осторожным в «noExcept-ining все функции», как я «постоянно»?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему я должен быть осторожным в «noExcept-ining все функции», как я «постоянно»?

Сообщение Anonymous »

Я не нашел видео о Все вещи ¹, но есть, по крайней мере, con.3: по умолчанию, передайте указатели и ссылки на const s из основных руководств CPP.

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

constexpr
Все вещи , например, CPPCON 2017: Бен Дин и Джейсон Тернер «ConstexPR All Things!» ², но, как это было предложено в комментариях, на самом деле не параллельно ни одному из Const или noExcept , потому что это не изменяет интерфейс функции, но просто добавляет дополнительную функциональность. Предложения чаще искажаются в отношении очень < /em> осторожны с ним: < /p>

[*]

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

noexcept
сложно, так как он является частью интерфейса функций. В частности, если вы пишете библиотеку, ваш клиент -код может зависеть от свойства noexcept . Может быть трудно изменить его позже, так как вы можете нарушить существующий код. < /Li>

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

noexcept
является частью интерфейса функции; Вы не должны добавлять это только потому, что ваша текущая реализация не бросает. Я не уверен в правильном ответе на этот вопрос, но я совершенно уверен, что то, как ваша функция ведет себя сегодня, не имеет к нему ничего общего…
[*]e.12: Используйте noExcept при выходе из функции из -за броска невозможным или неприемлемым из рекомендаций CPP, которое является менее либеральным, чем гипотетическим , что является менее либеральным, чем гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим .

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

noexcept
Все вещи .
У меня нет EMC ++ под рукой, но я помню, что Скотт Мейерс слишком подчеркнул то, что не возвращается от noExcept for Fund. Когда я объявляю параметр функции как const & , я не принимаю решение о интерфейсе, которое я не смогу вернуться в будущем, потому что он сломал всех моих клиентов? Возьмите случай с функцией, которая была разработана в первые дни C ++ 11, чтобы цикть в стандартном контейнере с доступом к чтению. Полагаю, можно было бы спроектировать его как это < /p>

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

void work(auto const& r) {
for (auto const& e : r) {
…
}
}
Зачем работать иметь доступ к записи к r вообще? Auto const & r казалось правильной вещью, я поддерживаю, по крайней мере, в «обычном» сценарии.
Но с C ++ 20 (или даже C ++ 14+range-v3), это уже не так, даже не в «обычном» сценарии, потому что можно учитывать, что вызывы не могут перенести контейнеры , но . Важно отметить, что эти представления могут потребоваться, чтобы мутировать, когда они перевернуты, как в случае для Filter_view :

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

std::vector v;
work(v);                                          // ok
work(v | std::views::transform(std::identity{})); // ok
work(v | std::views::filter(std::identity{}));    // compile-time failure
Последняя строка не компилируется с предоставленной объявлением работы .
Решение, , по крайней мере, в этом случае , это то, что работа должна принимать Auto && вместо Auto const & Code>. Две строки, которые были // OK , в первую очередь, поэтому выясняется, что древнее решение об объявлении Porm S R параметр Auto const & на самом деле не было клятвой кровавой кровавой кровавой кровавой кровавой.

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

constexpr
Все вещи было «побочным продуктом» более раннего все вещи откуда -то; Я любезно помню, как слышала, как Кейт Грегори сказала, что последнее в каком -то видео; Или, может быть, я просто не запоминаю, но я определенно думаю, что это общее предложение; Да, с учетом оговорки, конечно. /> (³) Я начал свою карьеру в 2019 году, поэтому я никогда не был программистом Pre-C ++ 17, поэтому я делаю предположения о прошлом, что может быть неправильным. < /p>

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

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

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

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

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

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

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