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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.71
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

using namespace std - C++

08.08.2013, 12:53. Просмотров 4350. Ответов 11
Метки нет (Все метки)

Обьясните пожалуйста понятным языком, что такое пространство имен, и зачем нужна эта команда или std::
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2013, 12:53     using namespace std
Посмотрите здесь:

Using namespace std - C++
В чем отличие, если один cout (или что-то другое) будет в std, а другой stdd, для чего вообще using namespace? Уже везде где только можно...

using namespace std; - C++
Здравствуйте. Я заметил, что многие программисты стараются избегать этой строчки в своих программах. С чем это связанно? И еще...

std:: vs namespace - C++
Тема не для холивара, объясните пожалуйста чем лучше std:: а не using namespace std ? Без namespace std, возникает такая ошибка, но...

namespace std - C++
Добрый день. Вычитал что могу использовать любой namespace. Но в другом месте написано что если не использовать std, то не сможет...

using namespace std - C++
using namespace std; скажите плиз что означает ета строка и для чего она нужна?

Использование using namespace std; - C++
Я где-то слышал что использование такой диррективы на корню убивает пространство имен, но ведь только в boost и stl есть похожие классы,...

Возникает ошибка с using namespace std; - C++
#include "stdio.h" #include "string.h" #include "math.h" #include "stdlib.h" #include "stdafx.h" #include "iostream.h" using...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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
погромист
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,165
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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 такое-то, это означает примерно следующее:
"Использовать пространство имен такое-то в этой области видимости".
То есть мы "скидываем" всё содержимое пространства имен в "текущую" область видимости, тем самым её засоряя ( пример про корневой каталог без разделения на папки ).

То есть пространства имен можно рассматривать как уточнение имени сущности.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2013, 14:18     using namespace std #9
Цитата Сообщение от Croessmah Посмотреть сообщение
То есть пространства имен можно рассматривать как уточнение имени сущности.
Почему зачернул? Всё же верно.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
08.08.2013, 14:20     using namespace std #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Почему зачернул? Всё же верно.
Безымянные пространства что-то смущают (даже как замена static)
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.08.2013, 14:41     using namespace std #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Безымянные пространства что-то смущают (даже как замена static)
На то они и безымянные. Нет имени - нет доступа в другом модуле.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2017, 11:59     using namespace std
Еще ссылки по теме:

Что означает using namespace std? - C++
Что означает в с++? using namespace std объясните пожалуйста простым языком))

Функции из заголовочника cstring размещены в namespace std ? - C++
Столкнулся с таким кодом в учебнике Стивена Праты (12 глава, стр. 641-615): // string1.h -- fixed and augmented string class...

На что влияет расположение строчки using namespace std; ? - C++
В учебнике вывод предлагают делать так: 1-ый способ: #include &lt;iostream&gt; int main() { std::cout &lt;&lt; &quot;Hello World!&quot; &lt;&lt;...

#include <list> - конфликт using namespace std с другими инклюдами - C++
Всем привет. Появилась надобность использовать списки, однако #include &lt;list&gt; подключается только вместе с using namespace std. Мои...

Коллеги что же все такие делает "using namespace std"? - C++
Я понял то что &quot;using namespace st&quot; мы вводим для того что бы не писать &quot;std::cout&lt;&lt;&quot; ну а конкретно, деловым...


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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6421 / 3060 / 303
Регистрация: 04.12.2011
Сообщений: 8,342
Записей в блоге: 3
16.04.2017, 11:59     using namespace std #12
Цитата Сообщение от Croessmah Посмотреть сообщение
Вот пространства имен призваны решать такие проблемы.
Хороший способ объяснения. Начальник разбрызгивающий слюну ( и пр. жидкости ) особенно хорош. Как-то реалистично всё и ярко. Класс!
Хочу бросить гнутый пятак в копилку.
По сути, добавление к имени префикса пространства/пространств, который может, учитывая их возможную вложенность, достаточно сложен:
Universe::MyGalactic::SolarSystem::MyComputer::MyArrayTest::my_array_size=12345;
это способ увеличить количество символов имени, снижая тем самым вероятность совпадений (конфликтов). Но ведь можно же было бы просто сочинять вот такие имена:
UniverseMyGalacticSolarSystemMyComputerMyArrayTest_my_array_size=12345;
или даже:
efruwetkwerjhnltkhrylkjmtyljtumkjlkumyukljmlm_MY_ARRAY_SIZE=12345;
Однако при произвольном кодировании длинного имени проблема уникальности порождает:
-проблему проверки всех подобных имён которые уже имеются на несовпадение;
-смысловая нагрузка, которую должно бы нести "хорошее" имя требует внимательного посимвольного прочтения и анализа каждого имени;
-сам по себе набор подобных имён утомителен и чреват ошибками, даже с применением копи-паст.
Применение механизма пространств имён даёт мощный инструмент управления уникальностью и простого контроля и набора.
Создавая пространство, можно отнести все имена к одной области. Конфликт пространств решается придумыванием другого префикса имени пространства. После этого, достаточно соблюдать уникальность лишь в пределах самого пространства. Возможность вложенности делает доступным порождение древовидных структур, в которых информация о имени документируется самим именем! Кроме всего, набор специальных директив позволяет подключать пространства целиком. Тут много возражений бывает и наверное, те кто против где-то правы. Но иногда, особенно при написании небольших кусочков, в частности для иллюстрации на форуме, например, это удобно.
Yandex
Объявления
16.04.2017, 11:59     using namespace std
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru