Код: Выделить всё
const
Код: Выделить всё
constexpr
[*]
Код: Выделить всё
noexcept
Код: Выделить всё
noexcept
[*]e.12: Используйте noExcept при выходе из функции из -за броска невозможным или неприемлемым из рекомендаций CPP, которое является менее либеральным, чем гипотетическим , что является менее либеральным, чем гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим гипотетическим .
Код: Выделить всё
noexcept
У меня нет EMC ++ под рукой, но я помню, что Скотт Мейерс слишком подчеркнул то, что не возвращается от noExcept for Fund. Когда я объявляю параметр функции как const & , я не принимаю решение о интерфейсе, которое я не смогу вернуться в будущем, потому что он сломал всех моих клиентов? Возьмите случай с функцией, которая была разработана в первые дни C ++ 11, чтобы цикть в стандартном контейнере с доступом к чтению. Полагаю, можно было бы спроектировать его как это < /p>
Код: Выделить всё
void work(auto const& r) {
for (auto const& e : 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>
, но dong> emer>
, но Dong> em> (³) Я начал свою карьеру в 2019 году, поэтому я никогда не был программистом Pre-C ++ 17, поэтому я делаю предположения о прошлом, что может быть неправильным. < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -i-const-a