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

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

Войти
Регистрация
Восстановить пароль
 
sab1ch
BrainOverflow
123 / 127 / 41
Регистрация: 31.03.2013
Сообщений: 556
#1

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

01.03.2016, 07:56. Просмотров 407. Ответов 13
Метки нет (Все метки)

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

Пространство имен - namespace std или std:: - C++
В каких случая лучше писать (std::cout) или просто прописать (namespace std) и почему ?

Пространство имен std - C++
Какой стиль лучше ? using std::cout; using std::endl; or using namespace std;

Пространство имен std - C++
В книге Дейтела (как, и в других источниках) написано, что можно написать using namespace std, а можно указывать std:: перед функциями. Но...

Есть опытные программисты - C++
Всем привет дорогие друзья. Помогите пожалуйста отредактировать одну программку она весит 700кб Если есть тот кто реально может помоч,...

Опытные программисты , нужно сделать считывание с файла матрицы 4*4 - C++
#include <iostream> #include <iomanip> #include <conio.h> using namespace std; int main() { int n; cout<<"Vvedite...

Пространство имен - C++
Как составить код, когда необходимо использовать классы и методы из разных пространств имен. К примеру используется cout из std и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ferrari F1
=^_^=
562 / 449 / 94
Регистрация: 27.01.2015
Сообщений: 2,622
Записей в блоге: 1
Завершенные тесты: 1
01.03.2016, 08:12 #2
Sabnik18, Как я понимаю, стандартное пространство используется для имен переменных/функции и т.д. СТАНДАРТНОЙ библиотеки. Написав:
C++
1
using namespace std;
ты тем самым начинаешь доопределять его СОБСТВЕННЫМИ именами, тем самым "захламляя" его, это может приводить к некорректному поведению программы (из-за конфликтов имен или при (пере)определении какого-либо стандартного имени)
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.03.2016, 08:47 #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ferrari F1, Нет, std ты не захламляешь. Ты захламляешь глобальную область видимости членами пространства имен std.
Sabnik18, Тут зависит от. В файле реализации никто не запрещает использовать. С другой стороны решение использовать или не использовать зависит от кол-ва используемых библиотек. Дабы не попасть в коллизию имен люди и не используют.
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,244
Записей в блоге: 3
Завершенные тесты: 1
01.03.2016, 10:48 #4
Цитата Сообщение от ForEveR Посмотреть сообщение
Ты захламляешь глобальную область видимости членами пространства имен std.
Скорее в "текущую".
Например,
C++
1
2
3
4
5
6
namespace Test
{
    using namespace std;
    //сюда скидываем
}
//здесь оно уже не катит
http://rextester.com/QDPV83065


using namespace std
John Prick
779 / 712 / 131
Регистрация: 27.07.2012
Сообщений: 2,045
Завершенные тесты: 3
01.03.2016, 11:32 #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
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
01.03.2016, 13:04 #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
123 / 127 / 41
Регистрация: 31.03.2013
Сообщений: 556
01.03.2016, 13:10  [ТС] #7
Цитата Сообщение от John Prick Посмотреть сообщение
Чтобы избежать ненужных проблем типа:
Вообще, можно using namespace std указать в заголовке, ну да ладно, все равно убедили.
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,244
Записей в блоге: 3
Завершенные тесты: 1
01.03.2016, 17:06 #8
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Вообще, можно using namespace std указать в заголовке
За такое вообще надо забивать до смерти.
Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
01.03.2016, 17:09 #9
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Вообще, можно using namespace std указать в заголовке, ну да ладно, все равно убедили.
В с++ можно вообще много чего делать вопрос в том, что нужно осознавать, что ты делаешь и какие последствия будут, можете указать в заголовке потом везде где вы его подключите получите действие этого самого using namespace std, если вы пишите библиотеку то ее пользователи за это вам будут "очень благодарны" вплоть до отказа использовать такую библиотеку, если вы пишите свою программку где всего один заголовочный файл и небольшое количество кода то в использовании этого вряд ли будет что то страшное, но я например даже в таких случаях не использую using namespace std, хотя иногда я все же использую using namespace не std но строго только в cpp и отдаю себе отчет что я делаю и чем мне это грозит иными словами я понимаю, что в данном случае от этого будет больше пользы чем вреда.
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 335
01.03.2016, 17:10 #10
Соглашусь с высказываниям выше. Определения всех имен типов не лучшая идея для больших программ. На приложение и так огромная нагрузка из-за большого кол-ва алгоритмов и т.д.(к примеру), дак и еще все типы определены. (тормозит программу)
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.03.2016, 17:15 #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nik- Посмотреть сообщение
дак и еще все типы определены. (тормозит программу)
Вообще никакого отношения. Хедер файл включен - типы определены.
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 335
01.03.2016, 17:17 #12
Извиняюсь, видимо что-то недопонял. Когда-то давно читал, что это сильно тормозит программу,это не так?
hoggy
6538 / 2718 / 470
Регистрация: 15.11.2014
Сообщений: 6,002
Завершенные тесты: 1
01.03.2016, 18:52 #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sabnik18 Посмотреть сообщение
Почему?
код читать удобнее.
видите такую вещь:
std::string
и сразу понятно что это, и откуда.
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
02.03.2016, 09:22 #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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2016, 09:22
Привет! Вот еще темы с ответами:

Пространство имен - C++
Зачем пространство имен в программировании я чет не понимаю? У мну в учебнике отак написано. Пространство имен, локализуя видимость...

Пространство имен - C++
Я часто встречаю в книгах, туторах, что объявлять пространство имен в больших проектах нельзя(не рекомендуемо), но нигде не сказано...

Пространство имен - C++
Подскажите, пожалуйста. Если я создам своё пространство имен и в нем создам функцию, например, abc() и при использовании в main() using...

пространство имен - C++
Один практикующий программист сказал мне, что пространство именusing namespace std; нежелательно объявлять в начале программы, а лучше...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.03.2016, 09:22
Ответ Создать тему
Опции темы

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