diff --git a/lifetime/ternary_operator.md b/lifetime/ternary_operator.md index 35c033d..77563aa 100644 --- a/lifetime/ternary_operator.md +++ b/lifetime/ternary_operator.md @@ -50,7 +50,7 @@ let output: &mut dyn std::io::Write = match confg { Вернемся теперь к C++. В нем, конечно, `switсh` не такой удобный и `if - else` не является выражением — не может возвращать значения. Но в C++ есть тернарный оператор, а вот он уже что-то возвращает. -Посмотрим на довольно распространенный сценарий: у нас есть некоторый key-value контейнер с неисзменяемой конфигурацией. Мы обращаемся к какому-то ключу, если он там есть -- отлично. Иначе -- используем значение по умолчанию. +Посмотрим на довольно распространенный сценарий: у нас есть некоторый key-value контейнер с неизменяемой конфигурацией. Мы обращаемся к какому-то ключу, если он там есть -- отлично. Иначе -- используем значение по умолчанию. ```C++ using Map = std::map; @@ -199,17 +199,17 @@ let updated_uri: &str = if !query.is_empty() { uri } ``` -С++ не позволяет себе такой неявности и сопряженных с ней некладных расходов. +С++ не позволяет себе такой неявности и сопряженных с ней накладных расходов. -Также копированине в тернарном операторе — это в некотором роде безопасное поведение по умолчанию: если результатом станет копия, то это точно не висячая ссылка! +Также копирование в тернарном операторе — это в некотором роде безопасное поведение по умолчанию: если результатом станет копия, то это точно не висячая ссылка! Последние примеры. Шестой. ```C++ test_default_getter(m, 42, []{ return "default"s; }); ``` -То же самое что и с четвертым и пятым, только возвращается чистое временное значенине, а не ссылка +То же самое что и с четвертым и пятым, только возвращается чистое временное значение, а не ссылка `const std::string& : std::string` даст в результате `std::string`. И левый аргумент всегда будет скопирован. @@ -263,7 +263,7 @@ int main() { } ``` -Поскольку мы теперь знаем, как работает тернарный оператор и что в райнтайме он по условию время жизни не продляет, можно относительно легко понять, что в обоих случаях произойдет копирование `a`. А вместе с ним и слайсинг — только подобъект базового класса будет скопирован. И дважды будет [выведено](https://godbolt.org/z/5j5hx4PWf) `base`. +Поскольку мы теперь знаем, как работает тернарный оператор и что в рантайме он по условию время жизни не продляет, можно относительно легко понять, что в обоих случаях произойдет копирование `a`. А вместе с ним и слайсинг — только подобъект базового класса будет скопирован. И дважды будет [выведено](https://godbolt.org/z/5j5hx4PWf) `base`. А что если попробовать наоборот?