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

Почему опытные программисты не определяют пространство имен std? - C++

Восстановить пароль Регистрация
 
sab1ch
BrainOverflow
 Аватар для sab1ch
123 / 127 / 41
Регистрация: 31.03.2013
Сообщений: 556
01.03.2016, 07:56     Почему опытные программисты не определяют пространство имен std? #1
Все чаще замечаю в различных статьях, на сайтах, форумах, что опытные программисты не используют
C++
1
using namespace std;
Почему? Стоит ли каждый раз новичку вписывать это пространство или лучше привыкать работать без него?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2016, 07:56     Почему опытные программисты не определяют пространство имен std?
Посмотрите здесь:

C++ Пространство имен
Пространство имен std C++
C++ Пространство имен std
пространство имен C++
Опытные программисты , нужно сделать считывание с файла матрицы 4*4 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ferrari F1
Заблокирован
416 / 290 / 63
Регистрация: 27.01.2015
Сообщений: 1,940
Записей в блоге: 1
Завершенные тесты: 1
01.03.2016, 08:12     Почему опытные программисты не определяют пространство имен std? #2
Sabnik18, Как я понимаю, стандартное пространство используется для имен переменных/функции и т.д. СТАНДАРТНОЙ библиотеки. Написав:
C++
1
using namespace std;
ты тем самым начинаешь доопределять его СОБСТВЕННЫМИ именами, тем самым "захламляя" его, это может приводить к некорректному поведению программы (из-за конфликтов имен или при (пере)определении какого-либо стандартного имени)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.03.2016, 08:47     Почему опытные программисты не определяют пространство имен std? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ferrari F1, Нет, std ты не захламляешь. Ты захламляешь глобальную область видимости членами пространства имен std.
Sabnik18, Тут зависит от. В файле реализации никто не запрещает использовать. С другой стороны решение использовать или не использовать зависит от кол-ва используемых библиотек. Дабы не попасть в коллизию имен люди и не используют.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11848 / 6827 / 772
Регистрация: 27.09.2012
Сообщений: 16,930
Записей в блоге: 2
Завершенные тесты: 1
01.03.2016, 10:48     Почему опытные программисты не определяют пространство имен std? #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Ты захламляешь глобальную область видимости членами пространства имен std.
Скорее в "текущую".
Например,
C++
1
2
3
4
5
6
namespace Test
{
    using namespace std;
    //сюда скидываем
}
//здесь оно уже не катит
http://rextester.com/QDPV83065


using namespace std
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
01.03.2016, 11:32     Почему опытные программисты не определяют пространство имен std? #5
Цитата Сообщение от Sabnik18 Посмотреть сообщение
опытные программисты не используют
Чтобы избежать ненужных проблем типа:
C++
1
2
// string.h
class string {};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// main.cpp
#include "string.h"
#include <string>
 
using namespace std;
 
// тут 100500 строк кода
 
int main()
{
    // тут ещё столько же
 
    string sss; // упс!
}
Цитата Сообщение от Sabnik18 Посмотреть сообщение
лучше привыкать работать без него?
Лучше привыкать работать только с тем, что тебе нужно в даный момент:
C++
1
2
3
4
5
int main()
{
    using std::string;
    string sss;
}
AlexVRud
414 / 143 / 36
Регистрация: 04.07.2014
Сообщений: 415
01.03.2016, 13:04     Почему опытные программисты не определяют пространство имен std? #6
Цитата Сообщение от Sabnik18 Посмотреть сообщение
не используют
C++
1
using namespace std;
в нём очень много и других простых вещей, например std::begin, std::max, std::fill, std::count, std::endl,... А в большом коде возможно появление и своих реализаций подобных вещей.
Для простых вещей префикс std:: будет полез при чтении другими людьми, например, если в коде есть std::u32string и icu::UnicodeString, то сразу понятно что и откуда.
Для более сложных случаев: using внутри функций уже станет уже скорее спасением, чем плохим стилем, например такой стандартный пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// high_resolution_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
 
int main ()
{
  using namespace std::chrono;
 
  high_resolution_clock::time_point t1 = high_resolution_clock::now();
 
  std::cout << "printing out 1000 stars...\n";
  for (int i=0; i<1000; ++i) std::cout << "*";
  std::cout << std::endl;
 
  high_resolution_clock::time_point t2 = high_resolution_clock::now();
 
  duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
 
  std::cout << "It took me " << time_span.count() << " seconds.";
  std::cout << std::endl;
 
  return 0;
}
sab1ch
BrainOverflow
 Аватар для sab1ch
123 / 127 / 41
Регистрация: 31.03.2013
Сообщений: 556
01.03.2016, 13:10  [ТС]     Почему опытные программисты не определяют пространство имен std? #7
Цитата Сообщение от John Prick Посмотреть сообщение
Чтобы избежать ненужных проблем типа:
Вообще, можно using namespace std указать в заголовке, ну да ладно, все равно убедили.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11848 / 6827 / 772
Регистрация: 27.09.2012
Сообщений: 16,930
Записей в блоге: 2
Завершенные тесты: 1
01.03.2016, 17:06     Почему опытные программисты не определяют пространство имен std? #8
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Вообще, можно using namespace std указать в заголовке
За такое вообще надо забивать до смерти.
Pancir
 Аватар для Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
01.03.2016, 17:09     Почему опытные программисты не определяют пространство имен std? #9
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Вообще, можно using namespace std указать в заголовке, ну да ладно, все равно убедили.
В с++ можно вообще много чего делать вопрос в том, что нужно осознавать, что ты делаешь и какие последствия будут, можете указать в заголовке потом везде где вы его подключите получите действие этого самого using namespace std, если вы пишите библиотеку то ее пользователи за это вам будут "очень благодарны" вплоть до отказа использовать такую библиотеку, если вы пишите свою программку где всего один заголовочный файл и небольшое количество кода то в использовании этого вряд ли будет что то страшное, но я например даже в таких случаях не использую using namespace std, хотя иногда я все же использую using namespace не std но строго только в cpp и отдаю себе отчет что я делаю и чем мне это грозит иными словами я понимаю, что в данном случае от этого будет больше пользы чем вреда.
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
01.03.2016, 17:10     Почему опытные программисты не определяют пространство имен std? #10
Соглашусь с высказываниям выше. Определения всех имен типов не лучшая идея для больших программ. На приложение и так огромная нагрузка из-за большого кол-ва алгоритмов и т.д.(к примеру), дак и еще все типы определены. (тормозит программу)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.03.2016, 17:15     Почему опытные программисты не определяют пространство имен std? #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nik- Посмотреть сообщение
дак и еще все типы определены. (тормозит программу)
Вообще никакого отношения. Хедер файл включен - типы определены.
Nik-
19 / 19 / 9
Регистрация: 12.07.2015
Сообщений: 322
01.03.2016, 17:17     Почему опытные программисты не определяют пространство имен std? #12
Извиняюсь, видимо что-то недопонял. Когда-то давно читал, что это сильно тормозит программу,это не так?
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
01.03.2016, 18:52     Почему опытные программисты не определяют пространство имен std? #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Почему?
код читать удобнее.
видите такую вещь:
std::string
и сразу понятно что это, и откуда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2016, 09:22     Почему опытные программисты не определяют пространство имен std?
Еще ссылки по теме:

Пространство имен C++
Есть опытные программисты C++
C++ Пространство имен

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

Или воспользуйтесь поиском по форуму:
AlexVRud
414 / 143 / 36
Регистрация: 04.07.2014
Сообщений: 415
02.03.2016, 09:22     Почему опытные программисты не определяют пространство имен std? #14
Хороший пример:

C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <algorithm>
using namespace std;
 
int count = 1;
int main() {
    cout<<count<<endl;
}
Добавлено через 54 секунды
Прикольнее закоментировать объявдение count
Yandex
Объявления
02.03.2016, 09:22     Почему опытные программисты не определяют пространство имен std?
Ответ Создать тему
Опции темы

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