Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?
Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Если не можешь объяснить значит так писать можно
... Люди делятся на 10 категорий: те кто понимают двоичное исчисление и тех кто не понимает
Здравствуйте, LaptevVV, Вы писали:
LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Ну примерчик можно такой
//h-файл#include <list>
using namespace std;
//что-то что использует h-файлclass list
{
public:
//...... realization
};
int main()
{
list myLst;//???Неопределенность
А суть его — писать надо так будто ты пишешь не для себя а для другого человека, который все, что о тебе знает — это тот код, который в h-файле. Вот и возникнет у него вопрос а почему это я не могу создать свой класс list. Ответ: потому что такую возможность абсолютно незаконно забирает у него ваш h-файл. Короче не будьте эгоистами мол
Здравствуйте, LaptevVV, Вы писали:
LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
хедер может быть подключен к любому сишному файлу (т.е. единице трансляции), в том числе и к тому, в котором подключается еще один хедер, объявляющий те же имена в глобальной области видимости.
и все: using namespace в хедере объехать очень сложно, ибо хедер обычно редактированию не подлежит.
Соответственно, правильное решение — писать using namespace в том сишном файле, в котором он не приводит к проблемам, а в проблемных файлах использовать полную квалификацию имен или вносить только неконфликтующие имена.
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, LaptevVV, Вы писали:
LVV>>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
G>Ну примерчик можно такой G>
G>//h-файл
G>#include <list>
G>using namespace std;
G>//что-то что использует h-файл
G>class list
G>{
G>public:
G>//...... realization
G>};
G>int main()
G>{
G> list myLst;//???Неопределенность
G>
G>А суть его — писать надо так будто ты пишешь не для себя а для другого человека, который все, что о тебе знает — это тот код, который в h-файле. Вот и возникнет у него вопрос а почему это я не могу создать свой класс list. Ответ: потому что такую возможность абсолютно незаконно забирает у него ваш h-файл. Короче не будьте эгоистами мол
На это следует резонный вопрос: а нафига писать свой list если есть стандартный?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс
'list' или 'vector'? Я бы так делать не стал. На всякий случай
Glоbus wrote:
> А суть его — писать надо так будто ты пишешь не для себя а для > другого человека, который все, что о тебе знает — это тот код, > который в h-файле. Вот и возникнет у него вопрос а почему это я не > могу создать свой класс list. Ответ: потому что такую возможность > абсолютно незаконно забирает у него ваш h-файл. Короче не будьте > эгоистами мол
Здравствуйте, TheBeard, Вы писали:
TB>Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс TB>'list' или 'vector'? Я бы так делать не стал. На всякий случай ;)
а тебе не приходилось иметь дело с библиотеками, которые написаны до появления stl?
вот ты обрадуешься, думаю, подключив оба хедера — stl и библиотечный, и словив конфликт.
Здравствуйте, LaptevVV, Вы писали:
LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Здравствуйте, TheBeard, Вы писали:
TB>Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс TB>'list' или 'vector'? Я бы так делать не стал. На всякий случай
Не играет рояли — назови по другому. CStringProcessor к примеру пойдет? Вполне стандартное название и может оказаться где угодно.
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, LaptevVV, Вы писали:
LVV>>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
J>хедер может быть подключен к любому сишному файлу (т.е. единице трансляции), в том числе и к тому, в котором подключается еще один хедер, объявляющий те же имена в глобальной области видимости.
Например, ЧУЖАЯ сишная библиотека. Или модуль, написанный другим программистом в команде.
Ы? J>и все: using namespace в хедере объехать очень сложно, ибо хедер обычно редактированию не подлежит.
J>Соответственно, правильное решение — писать using namespace в том сишном файле, в котором он не приводит к проблемам, а в проблемных файлах использовать полную квалификацию имен или вносить только неконфликтующие имена.
Мораль — не используйте ЧУЖИХ библиотек (и чужих модулей ), а токмо стандартные (и свои )!
Катта рахмат! Правда, первачки пока плохо понимают, какая это программа может быть настолько большой, что требуется ДВА программиста!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Про пространства имен
От:
Аноним
Дата:
04.11.04 11:26
Оценка:
А если так?
namespace pvt
{
using namespace std;
class list
...
}
Здравствуйте, Glоbus, Вы писали:
G>Здравствуйте, LaptevVV, Вы писали:
LVV>>На это следует резонный вопрос: а нафига писать свой list если есть стандартный?
G>На что следует резонный встречный вопрос: а тот кто пользует h-файл обязательно знает о существовании стандартного листа?
Ну, тогда я ему двойку поставлю!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, LaptevVV, Вы писали:
LVV>>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
B>Этот топик
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, LaptevVV, Вы писали:
LVV>>>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>>>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
J>>хедер может быть подключен к любому сишному файлу (т.е. единице трансляции), в том числе и к тому, в котором подключается еще один хедер, объявляющий те же имена в глобальной области видимости. LVV>Например, ЧУЖАЯ сишная библиотека. Или модуль, написанный другим программистом в команде. LVV> :) :) :) LVV>Ы?
Да, только смешного ничего — на практике такое сплошь и рядом.
J>>Соответственно, правильное решение — писать using namespace в том сишном файле, в котором он не приводит к проблемам, а в проблемных файлах использовать полную квалификацию имен или вносить только неконфликтующие имена. LVV>Мораль — не используйте ЧУЖИХ библиотек (и чужих модулей :) :) ), а токмо стандартные (и свои :) :) :) )! LVV> :)
Ага. Попробуй, не используя "чужих библиотек", написать конвертер, перекачивающий данные из одного формата в другой. Или перегоняющий их из одной системы в другую. Сам с нуля будешь АПИ разрабатывать?
А теперь представь, что уже есть АПИ, причем С++, причем STL! да вот незадача — какой-то лабух написал в хедере АПИ using namespace std.
А в другой библиотеке, реализующей АПИ второй системы, тоже используются всякие хорошие имена типа vector и list, только уже сишные.
Представил?
Хорошо на душе? ;)
LVV>Катта рахмат! Правда, первачки пока плохо понимают, какая это программа может быть настолько большой, что требуется ДВА программиста! LVV> :) :) :)
Ну что ж делать. Дай вводную на эту тему. С указанием человеко-лет, требующихся на написание, скажем, первой кваки. Или винды.
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Glоbus, Вы писали:
G>>Здравствуйте, LaptevVV, Вы писали:
LVV>>>На это следует резонный вопрос: а нафига писать свой list если есть стандартный?
G>>На что следует резонный встречный вопрос: а тот кто пользует h-файл обязательно знает о существовании стандартного листа? LVV>Ну, тогда я ему двойку поставлю!!!! LVV>
А че это ему? Второй "резонный вопрос" должен быть твоим по идее
G>//h-файл
G>#include <list>
G>using namespace std;
G>//что-то что использует h-файл
G>class list
G>{
G>public:
G>//...... realization
G>};
G>int main()
G>{
G> list myLst;//???Неопределенность
G>
G>А суть его — писать надо так будто ты пишешь не для себя а для другого человека, который все, что о тебе знает — это тот код, который в h-файле. Вот и возникнет у него вопрос а почему это я не могу создать свой класс list. Ответ: потому что такую возможность абсолютно незаконно забирает у него ваш h-файл. Короче не будьте эгоистами мол
Это ерунда! у тебя же не возникает желания написать так:
class int
{
};
или
int strcmp(
const char *string1,
const char *string2
);
так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами
а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std
А>так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами
Тогда (не помню чье авторство) перечисли все имена запрещенные к использованию в программах C++. А. Слабо. Вот тото же!
А>а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std
Извини, полное имя у стандартного list — std::list, а я пишу свой в глобальном пространстве — ::list. В чем проблема?
Здравствуйте, LaptevVV, Вы писали:
LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле? LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
#include <fstream>
#include <fstream.h> // Была такая библиотека потокового ввода-вывода в файл ещё до появления stl.
// Поэтому, чисто теоретически можно столкнуться с включениями обоих заголовочных файлов
// может неявно, но опосредовано через несколько включений других (особенно старых)
// библиотек.using namespace std;
int main(int argc, char* argv[])
{
std::ifstream test1; // Отлично компилируется - ifstream из <fstream>
ifstream test; // Приехали - error C2872: 'ifstream' : ambiguous symbol
// ifstream объявлен в <fstream.h> без включения в какое-либо пространства имён,
// другой ifstream объявлен в <fstream> в пространстве имён std, но директива using
// разрешает опускать для него префикс std::return 0;
}
Ну как — достаточно убедительно?
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, Анатолий Широков, Вы писали:
А>>так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами
АШ>Тогда (не помню чье авторство) перечисли все имена запрещенные к использованию в программах C++. А. Слабо. Вот тото же!
А>>а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std
АШ>Извини, полное имя у стандартного list — std::list, а я пишу свой в глобальном пространстве — ::list. В чем проблема?
а я пишу на старом компиляторе... использую давно написанную библиотеку... и в ней как назло стоит using namespace std; или вообще использован старый стиль еще без пространства имен, и при этом тоже пдо смерти хочу сделать свой list.
а насчет перечисления имен.... я и все стандартные функции не согу на память перечислить, но это же не значит что надо кидаться писать функции с такими же именами...