Конкретный вариант использования to_address - PullRequest
20 голосов
/ 07 июня 2019

Итак, по-видимому, C ++ 20 получает std::to_address.

Со страницы cppreference его сценарий использования мне не кажется понятным.У нас уже есть operator& и std::addressof, зачем нам нужна еще одна функция, которая дает нам адрес для ее аргумента?

1 Ответ

28 голосов
/ 07 июня 2019

std::addressof берет объект и получает его адрес, даже если унарный «адрес оператора» (он же &) был перегружен.

std::to_address берет указатель, умный или тупой, и возвращаетуказатель.

В основном, при написании библиотеки std, в этом случае для распределителей разработчики находят, что им нужна эта служебная функция.Он небольшой, простой и должен быть написан всякий раз, когда кто-то хочет работать с распределителями.Поэтому они написали легкое предложение добавить его.

Здесь есть несколько ловушек;вы не можете сделать std::addressof(*ptr), потому что *ptr еще не всегда является объектом.Уже есть черта, которая решает эту проблему, но написание кода с использованием черт напрямую раздражает.


Почему, когда они не завершили вашу любимую функцию?Как сеть?

Для сравнения, сеть не является легким предложением.И текущий дизайн зависит от исполнителей (в основном абстракции концепции потоковых пулов).Цель написания высокоуровневой библиотеки, которая обеспечивает производительность C / ASM, созданную вручную, делает написание сетевых трудностей более сложной, чем двухстрочная служебная функция.

Тогда кто-то жалуется, что ему требуется 15 минут, чтобы утвердить полезную служебную функцию,потому что многопользовательский год эпическое предложение еще не в.Несправедливость.

Или что-то в этом роде.

...