Псевдоним указателя - в C ++ 0x - PullRequest
3 голосов
/ 01 января 2011

Я думаю (просто как идея) о псевдонимах несвязанных указателей в C ++ 0x. Я думал о том, чтобы увидеть, может ли это быть реализовано аналогично константной корректности, то есть выполнено компилятором. Каковы будут требования для такой вещи? Поскольку это скорее мысленный эксперимент, я совершенно счастлив взглянуть на решения, которые разрушают устаревший код или переопределяют половину языка и тому подобное.

Что бы я на самом деле не хотел делать, так это, скажем, restrict из C99, где программист просто обещает это. Должен применяться.

Я думал о том, чтобы unique_ptr был не частью библиотеки, а частью языка. Таким образом, компилятор может выполнить специальные оптимизации для него и написать свои собственные классы уникальных указателей, если это необходимо.

1 Ответ

1 голос
/ 29 октября 2011

Стандартная библиотека C ++ (включая std::unique_ptr) является частью языка.

Кроме того, соответствующим программам не разрешается добавлять объявления и определения в пространство имен std.

Увидев экземпляр std::unique_ptr<T>, компилятор знает все о поведении этого экземпляра - это именно то поведение, которое было реализовано как часть языковой реализации, частью которой является сам компилятор. и компилятор может выполнять «специальные оптимизации», исходя из гарантий стандарта C ++.

В качестве примера того, что происходит из той же мысли, GCC уже делает это с рядом стандартных функций C99 в размещенном режиме - он может заменить вызовы стандартных функций встроенной последовательностью insn или вызовами других функций - именно потому, что GCC знает точную семантику, просто зная имя функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...