Я читал, что использование директивы не рекомендуется в C++, говоря, что никогда не ставить с помощью директив в файлы заголовков. Почему так? Любой намек на меня?Почему использование директивы в C++ не рекомендуется?
Спасибо!
Я читал, что использование директивы не рекомендуется в C++, говоря, что никогда не ставить с помощью директив в файлы заголовков. Почему так? Любой намек на меня?Почему использование директивы в C++ не рекомендуется?
Спасибо!
using namespace x;
- очень плохая идея, так как у вас есть Не знаю какие имена вы импортируете, даже со стандартной библиотекой.
Однако: using std::cout;
и подобные заявления являются очень хорошая идея, потому что они импортируют символы в явном виде, и сделать код более удобным для чтения (хотя она по-прежнему не может быть хорошей идеей, чтобы положить их в глобальном масштабе в заголовочных файлах) ,
Потому что он может сломать рабочий код при попытке добавить свой заголовок, если пространство имен заголовков переполняет другое пространство имен, определенное в прошлом рабочем коде.
Если говорить о «с использованием» директивы, причина не использования, потому что если вы говорите,
using namespace std;
в заголовочном файле, все файлы, которые #include этот заголовок будет вынужден использовать это пространство имен, и это может вызвать проблемы.
Нет, они не будут вынуждены использовать это пространство имен. – 2010-01-06 20:06:32
«Это не аргумент, это просто противоречие!» – struppi
@struppi mynamespace :: foo = 1 – 2010-01-06 20:26:43
Это похоже на no, чтобы объявлять статические переменные в файлах заголовков. Добавление использования инструкции в файлы заголовков приведет пространство имен в .cpp-файлы, содержащие заголовочный файл. Это не обязательно. В худшем случае вам может потребоваться изменить некоторые имена переменных или функций в .cpp, чтобы избежать конфликтов имен.
, который заботится о том, какие имена вы импортируете, ошибки компилятора, если есть неопределенность ... – Inverse
@ Inverse, вы не только видимы имена, но и имена видны как часть более широкой области применения, включающей как директиву using, так и пространство имен что он указывает. Имена явно не импортируются в область действия директивы. Так возможны двусмысленности с гораздо большим количеством имен. –