Про пространства имен
От: LaptevVV Россия  
Дата: 04.11.04 11:03
Оценка:
Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?
Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Про пространства имен
От: BacCM Россия  
Дата: 04.11.04 11:08
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?

LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?
Если не можешь объяснить значит так писать можно
... Люди делятся на 10 категорий: те кто понимают двоичное исчисление и тех кто не понимает
Re: Про пространства имен
От: Glоbus Украина  
Дата: 04.11.04 11: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-файл. Короче не будьте эгоистами мол
Удачи тебе, браток!
Re: Про пространства имен
От: jazzer Россия Skype: enerjazzer
Дата: 04.11.04 11:12
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?

LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?

хедер может быть подключен к любому сишному файлу (т.е. единице трансляции), в том числе и к тому, в котором подключается еще один хедер, объявляющий те же имена в глобальной области видимости.

и все: using namespace в хедере объехать очень сложно, ибо хедер обычно редактированию не подлежит.

Соответственно, правильное решение — писать using namespace в том сишном файле, в котором он не приводит к проблемам, а в проблемных файлах использовать полную квалификацию имен или вносить только неконфликтующие имена.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Про пространства имен
От: LaptevVV Россия  
Дата: 04.11.04 11:12
Оценка:
Здравствуйте, 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 если есть стандартный?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Про пространства имен
От: TheBeard Россия  
Дата: 04.11.04 11:14
Оценка:
Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс
'list' или 'vector'? Я бы так делать не стал. На всякий случай

Glоbus wrote:

> А суть его — писать надо так будто ты пишешь не для себя а для

> другого человека, который все, что о тебе знает — это тот код,
> который в h-файле. Вот и возникнет у него вопрос а почему это я не
> могу создать свой класс list. Ответ: потому что такую возможность
> абсолютно незаконно забирает у него ваш h-файл. Короче не будьте
> эгоистами мол
Posted via RSDN NNTP Server 1.9 gamma
Re[3]: Про пространства имен
От: Glоbus Украина  
Дата: 04.11.04 11:18
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>На это следует резонный вопрос: а нафига писать свой list если есть стандартный?


На что следует резонный встречный вопрос: а тот кто пользует h-файл обязательно знает о существовании стандартного листа?
Удачи тебе, браток!
Re[3]: Про пространства имен
От: jazzer Россия Skype: enerjazzer
Дата: 04.11.04 11:18
Оценка: +2
Здравствуйте, TheBeard, Вы писали:

TB>Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс

TB>'list' или 'vector'? Я бы так делать не стал. На всякий случай ;)

а тебе не приходилось иметь дело с библиотеками, которые написаны до появления stl?

вот ты обрадуешься, думаю, подключив оба хедера — stl и библиотечный, и словив конфликт.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Про пространства имен
От: Bell Россия  
Дата: 04.11.04 11:19
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?

LVV>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?

Этот топик
Автор: Tuo_Bellas
Дата: 13.10.04
уже читался?
Любите книгу — источник знаний (с) М.Горький
Re[3]: Про пространства имен
От: Glоbus Украина  
Дата: 04.11.04 11:20
Оценка:
Здравствуйте, TheBeard, Вы писали:

TB>Это всё правильно, конечно, только Вы сами назвали бы _свой_ класс

TB>'list' или 'vector'? Я бы так делать не стал. На всякий случай

Не играет рояли — назови по другому. CStringProcessor к примеру пойдет? Вполне стандартное название и может оказаться где угодно.
Удачи тебе, браток!
Re[2]: Про пространства имен
От: LaptevVV Россия  
Дата: 04.11.04 11:24
Оценка:
Здравствуйте, 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
...
}
Re[4]: Про пространства имен
От: LaptevVV Россия  
Дата: 04.11.04 11:27
Оценка: :))
Здравствуйте, Glоbus, Вы писали:

G>Здравствуйте, LaptevVV, Вы писали:


LVV>>На это следует резонный вопрос: а нафига писать свой list если есть стандартный?


G>На что следует резонный встречный вопрос: а тот кто пользует h-файл обязательно знает о существовании стандартного листа?

Ну, тогда я ему двойку поставлю!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Про пространства имен
От: LaptevVV Россия  
Дата: 04.11.04 11:28
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, LaptevVV, Вы писали:


LVV>>Как наиболее доходчиво одной двумя фразами сформулировать, почему низзя писать using namespace std; в h-файле?

LVV>>Все, что я первачкам говорил — как-то длинно и неубедительно получается. Или, может, примерчик небольшой, но убедительный кто приведет?

B>Этот топик
Автор: Tuo_Bellas
Дата: 13.10.04
уже читался?

О!!!!!!! Спасибо! Раньше читал, но после 15-го в связи с круговерьтю дел совсем про него забыл!!!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Про пространства имен
От: jazzer Россия Skype: enerjazzer
Дата: 04.11.04 11:33
Оценка: 1 (1)
Здравствуйте, 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> :) :) :)

Ну что ж делать. Дай вводную на эту тему. С указанием человеко-лет, требующихся на написание, скажем, первой кваки. Или винды.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Про пространства имен
От: Glоbus Украина  
Дата: 04.11.04 11:38
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Glоbus, Вы писали:


G>>Здравствуйте, LaptevVV, Вы писали:


LVV>>>На это следует резонный вопрос: а нафига писать свой list если есть стандартный?


G>>На что следует резонный встречный вопрос: а тот кто пользует h-файл обязательно знает о существовании стандартного листа?

LVV>Ну, тогда я ему двойку поставлю!!!!
LVV>

А че это ему? Второй "резонный вопрос" должен быть твоим по идее
Удачи тебе, браток!
Re[2]: Про пространства имен
От: Александр Россия  
Дата: 04.11.04 11:38
Оценка:
Здравствуйте, Glоbus, Вы писали:


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-файл. Короче не будьте эгоистами мол

Это ерунда! у тебя же не возникает желания написать так:
class int
{
};

или
int strcmp(
   const char *string1,
   const char *string2 
);

так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами
а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std
Re[3]: Про пространства имен
От: Анатолий Широков СССР  
Дата: 04.11.04 11:45
Оценка:
А>так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами

Тогда (не помню чье авторство) перечисли все имена запрещенные к использованию в программах C++. А. Слабо. Вот тото же!

А>а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std


Извини, полное имя у стандартного list — std::list, а я пишу свой в глобальном пространстве — ::list. В чем проблема?
Re: Про пространства имен
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 04.11.04 11:45
Оценка: 1 (1)
Здравствуйте, 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;
}


Ну как — достаточно убедительно?
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[4]: Про пространства имен
От: Александр Россия  
Дата: 04.11.04 11:54
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

А>>так что это не аргумент! в пространстве std все вещи стандартизированы и ты не жоджен создавать функции и классы с такими же именами


АШ>Тогда (не помню чье авторство) перечисли все имена запрещенные к использованию в программах C++. А. Слабо. Вот тото же!


А>>а то можно ведь сказать что свой клас list может возникнуть точно такое же желание запихнуть в свой namespace std


АШ>Извини, полное имя у стандартного list — std::list, а я пишу свой в глобальном пространстве — ::list. В чем проблема?


а я пишу на старом компиляторе... использую давно написанную библиотеку... и в ней как назло стоит using namespace std; или вообще использован старый стиль еще без пространства имен, и при этом тоже пдо смерти хочу сделать свой list.
а насчет перечисления имен.... я и все стандартные функции не согу на память перечислить, но это же не значит что надо кидаться писать функции с такими же именами...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.