Почему не там никакой способ отменить 'использование' в C++?

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

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

9
задан James McNellis 29 September 2012 в 03:35
поделиться

3 ответа

Это происходит потому, что директива using не предназначена для использования в родном коде C++. Она предназначена для того, чтобы помочь мигрировать код на Си на Си++. В этом контексте "неиспользование" не имеет смысла.

- правка. Мне следовало быть более конкретным. В данном конкретном случае, похоже, что mstearn использует директиву using для глобального включения пространства имен std. Обычно это плохая идея, поскольку приводит к загрязнению глобального пространства имен, и делать это следует только в определенных обстоятельствах, например, при переходе с другого языка на C++.

Существуют и другие ситуации, когда использование директивы using является нормальным (внутри функции, композиция пространств имен). Однако "неиспользование" не имеет смысла и в этих ситуациях.

2
ответ дан 4 December 2019 в 14:26
поделиться

Директива using помещает имя или набор имен в заданную декларативную область видимости.

Вы не можете "отказаться от использования" по той же причине, по которой вы не можете сказать

int x = 42;
// and later
[remove name x somehow]

В C ++ нет никакого способа вообще исключить имена из области видимости, независимо от того, откуда эти имена.

Учитывая, что это усложнит поиск имени (поскольку имена могут быть добавлены и удалены из области видимости), если нет действительно убедительного варианта использования, это вряд ли будет рассматриваться как потенциальная языковая функция.

11
ответ дан 4 December 2019 в 14:26
поделиться

Главным образом потому, что есть обходные пути, которые достаточно просты и понятны, что практически ничего не будет получено, включив «функцию» для этой конкретной цели. Хотя я не уверен, что он когда-либо говорил об этом прямо, я думаю, что вы можете утверждать, что одним из руководящих принципов в дизайне C++ всегда было предпочтение общих механизмов специальному назначению, поэтому использование существующей системы области (например) имеет больше смысла, чем добавление какого-то специального способа удалить что-то из области после того, как она была введена.

1
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: