Форум программистов, компьютерный форум CyberForum.ru

using namespace std - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.71
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
08.08.2013, 12:53     using namespace std #1
Обьясните пожалуйста понятным языком, что такое пространство имен, и зачем нужна эта команда или std::
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 13:04     using namespace std #2
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Обьясните пожалуйста понятным языком, что такое пространство имен, и зачем нужна эта команда или std::
Есть большое множивство разнообразного функционала и оно скрыто в std
Проше будит обьяснить так если ты создаш 2-ве функции с одинаковыми именами ты не сможиш их применять однако если ты разместиш их прототипы в разных хедерах и подключиш только 1-н то все будит нормально ) тоесть std это стандартная пространство имен но если ты попробуеш создать чтото такое что уже там присутствует или имеет эдентичное название ты получиш ошибку . а когда ты пишиш using namespace std ты достаеш все что там храниться и можиш использовать в своей проге

Добавлено через 5 минут
Однако такжи можно не использовать все пространство имен а доставать только то что тебе необходимо например
std::cout
std::cin

в таком случае ты сможиш использовать все что тебе необходимо из std и такжи использовать свои классы функции имеющие эдентичные названия с теми что хранятся в std
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
08.08.2013, 13:13  [ТС]     using namespace std #3
Цитата Сообщение от alex1392 Посмотреть сообщение
Есть большое множивство разнообразного функционала и оно скрыто в std
Проше будит обьяснить так если ты создаш 2-ве функции с одинаковыми именами ты не сможиш их применять однако если ты разместиш их прототипы в разных хедерах и подключиш только 1-н то все будит нормально ) тоесть std это стандартная пространство имен но если ты попробуеш создать чтото такое что уже там присутствует или имеет эдентичное название ты получиш ошибку . а когда ты пишиш using namespace std ты достаеш все что там храниться и можиш использовать в своей проге

Добавлено через 5 минут
Однако такжи можно не использовать все пространство имен а доставать только то что тебе необходимо например
std::cout
std::cin

в таком случае ты сможиш использовать все что тебе необходимо из std и такжи использовать свои классы функции имеющие эдентичные названия с теми что хранятся в std
А почему я например могу два раза ввести printf и не вводить std?
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 13:28     using namespace std #4
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
А почему я например могу два раза ввести printf и не вводить std?
точно не скажу но printf это функция Си возможно что она заложина в глубине самого языка и не относиться к std )
ух щяз меня бить будут ))

Добавлено через 6 минут
Но уверености 0 ибо с принтф ваапше не общяюсь)
Belfegor
08.08.2013, 13:29
  #5

Не по теме:

Цитата Сообщение от alex1392 Посмотреть сообщение
printf
Цитата Сообщение от alex1392 Посмотреть сообщение
она заложина в глубине самого языка
Цитата Сообщение от alex1392 Посмотреть сообщение
меня бить будут
будут

coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
08.08.2013, 13:30     using namespace std #6
CHELOVEKPAUK, Неймспейсы ввели в язык С++ для того, чтобы избежать коллизии имен

Не по теме:

alex1392, пожалуйста, пишите грамотно, в редакторе сообщений есть же подчеркивание неправильных слов. Читать невозможно ИМХО

Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,163
Завершенные тесты: 2
08.08.2013, 13:31     using namespace std #7
Цитата Сообщение от alex1392 Посмотреть сообщение
printf это функция Си возможно что она заложина в глубине самого языка и не относиться к std
вообще верно, сишные функции относятся к глобальному пространству имен, но если добавлять хидеры например #include <cstdio>, то все функции этого файла помещаются в std

пример - пишешь ты игру - и есть у тебя в игре собачка, кошечка и человек, и вот пишешь ты графику и обзываешь классы HymanGraphic, CatGraphic и DogGraphic. Для звуков извлекаемых из твоих персонажей - HumanSound, CatSound, DogSound - в таком духе то есть для каждого модуля придумывать уникальное имя чтоб конфликтов не было. С пространствами имен ты определяешь пространства Graphic{Human, Dog, Cat} и Sound{Human, Dog, Cat} и сразу видно что к чему относится - ну няша же
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
08.08.2013, 13:48     using namespace std #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Обьясните пожалуйста понятным языком, что такое пространство имен,
Представьте себе Вашу файловую систему без каталогов - всё в корневике (в глобальном пространстве имен).
Какие проблемы могут возникнуть?
Самое первое - нельзя иметь два файла с одним именем на самом деле можно, но сейчас не об этом потому как возникнет конфликт имен.
Теперь допустим, что всё же у нас два разных файла с одним именем (файл1) оказались в корневике и Вам начальник со свирепым выражением лица, крича и разбрызгивая во все стороны свою слюну кричит "Открой файл1", но вот беда - их два и какой открывать? У Вас по сути один нормальный путь - спросить какой именно, собственно компилятор так и делает - выдает ошибку с текстом на подобии "Имя 'такое-то' двусмысленно".
А если бы всё лежало по папкам, то коллизий бы не возникло.
Вам бы сказали открыть файл "файл1" из каталога "каталог1" ( каталог1::файл1 )
или открыть файл "файл1" из каталога "каталог2" ( каталог2::файл1 )

А теперь к примеру на программе:
А теперь представьте, что написали Вы программу, всё работает - класс, всё довольны!
И вот решили вдруг, что нужно еще сделать пару фишек. Нашли стороннюю библиотеку, которая отлично подходит для реализации этих самых "фишек", но вот беда в ней есть классы с таким же именем как и у Вас. Что делать? Создавать копию Вашего класса, но с другим именем? Ну это жестко.
Вот пространства имен призваны решать такие проблемы. Например, вся стандартная библиотека, содержится в одном пространстве имен std, а подключаемые файлы так же определяют свои пространства имен, например библиотека boost находится в пространстве имен boost. Если писать boost::vector, то будет понятно, что используется вектор из библиотеки boost, а не std.
Что касается using namespace такое-то, это означает примерно следующее:
"Использовать пространство имен такое-то в этой области видимости".
То есть мы "скидываем" всё содержимое пространства имен в "текущую" область видимости, тем самым её засоряя ( пример про корневой каталог без разделения на папки ).

Добавлено через 1 минуту
То есть пространства имен можно рассматривать как уточнение имени сущности.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 14:18     using namespace std #9
Цитата Сообщение от Croessmah Посмотреть сообщение
То есть пространства имен можно рассматривать как уточнение имени сущности.
Почему зачернул? Всё же верно.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,917
Записей в блоге: 2
Завершенные тесты: 1
08.08.2013, 14:20     using namespace std #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему зачернул? Всё же верно.
Безымянные пространства что-то смущают (даже как замена static)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 14:41     using namespace std
Еще ссылки по теме:

std:: vs namespace C++
C++ Использование using namespace std;
namespace std C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.08.2013, 14:41     using namespace std #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Безымянные пространства что-то смущают (даже как замена static)
На то они и безымянные. Нет имени - нет доступа в другом модуле.
Yandex
Объявления
08.08.2013, 14:41     using namespace std
Ответ Создать тему
Опции темы

Текущее время: 19:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru