mirror of
https://github.com/Nekrolm/ubbook.git
synced 2026-06-09 13:14:18 +03:00
Update ternary_operator.md: typos (#120)
Деаллоцировали пару лишних буковок
This commit is contained in:
@@ -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<int, std::string>;
|
||||
@@ -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`.
|
||||
|
||||
А что если попробовать наоборот?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user