Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
kindertei
0 / 0 / 1
Регистрация: 04.08.2016
Сообщений: 96
Завершенные тесты: 2
1

Стоит ли использовать "using namespace std"?

27.10.2016, 20:44. Просмотров 2906. Ответов 29
Метки c++ (Все метки)

В разных источниках все по-разному относятся к этой строчке. Почему ее стоит или не стоит использовать? Чем лучше
std::cout. Что используется в реальной жизни?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 20:44
Ответы с готовыми решениями:

Стоит ли использовать "Вихрь Мерсенна" (std::mt19937)?
Чем он отличается от "обычного" stdlib'ного ГПСЧ? Генерирует ли он более... качественные ПСЧ? И...

Ошибка namespace "std" не содержит члена "cout"
Вот такие ошибки в общем Собственно, вот сам код #pragma once #include <Windows.h>...

namespace "std" has no member "vector"
Собственно такая проблема, мне нужно использовать в программе std::vector, однако VC ругается, мол...

Коллеги что же все такие делает "using namespace std"?
Я понял то что "using namespace st" мы вводим для того что бы не писать "std::cout<<" ну а...

Для чего в коде нужна строка "using namespace std"?
у меня возникла проблема при удалении "using namespace std;" перестает работать cout точнее пишет ...

29
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
27.10.2016, 23:43 21
Цитата Сообщение от kindertei Посмотреть сообщение
Почему ее стоит или не стоит использовать? Чем лучше
std::cout.
Обсуждалось уже в этой темке.
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну, мне кажется, что если вещи вредные, ненужные и бессмысленные делаются даже из благих побуждений, то от этого они не перестают быть вредными, ненужными и бессмысленными.
Вообще-то причин применения этих юзингов, по моему мнению, на самом деле три:
1) После выпуска стандарта 1997 года так стали писать люди, привыкшие к прежнему написанию без пространств имен.
2) Подражание примерам в книгах, где авторы делают это для экономии букв, а точнее по причине 1, а точнее из глупости. Вменяемые авторы, кстати, так не делают.
3) Психологи говорят, что незнакомые слова вызывают у людей страх, поэтому люди, не знающие что такое пространства имен и для чего они нужны, пытаются писать код так, чтобы совсем о них забыть. А ведь пространства имен - это модули. Т.е. вы используете в своем модуле переменную, объявленную в другом модуле, а делаете вид, что она объявлена в вашем, чем вводите читателя программы в заблуждение. А по современным представлениям ясность и удобочитаемость программы важнее даже ее быстродействия и экономии памяти, а уж тем более каких-то тараканов в голове у программиста.
К тому же основные критерии качества программы – это удобочитаемость и минимизация зависимостей.
Обсуждаемый юзинг снижает качество по обоим показателям без каких-либо выгод от этого.
1
Croessmah
++Ͻ
15870 / 8998 / 1728
Регистрация: 27.09.2012
Сообщений: 22,122
Записей в блоге: 2
Завершенные тесты: 2
28.10.2016, 09:21 22
Например, вот одно из применений using namespace:
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
26
#include <iostream>
#include <utility>
 
 
 
 
struct Test
{
    bool operator==(const Test &) const {return true;}
    bool operator<(const Test &) const {return true;}
};
 
 
 
 
int main()
{
    Test t1;
    Test t2;
    t1 == t2;//ok
    t1 < t2;//ok
    //t1 != t2;//error
    using namespace std::rel_ops;
    t1 != t2;//ok
    t1 >= t2;//ok
}
и то завернул в наименьший скоуп.
О rel_ops.
1
Avazart
Эксперт С++
7962 / 5783 / 571
Регистрация: 10.12.2010
Сообщений: 26,591
Записей в блоге: 17
28.10.2016, 11:21 23
Неймспейсы(и их явное указание) нужны для разрешения проблемы конфликта имен.
Если конфликта имен не предвидится не сейчас не в ближайшей перспективе, то смысла указать пространства имен явно раз за разом нет абсолютно, тем более хелеувордах.
В не хелоуворлдах, обычно используется не только STL а другие либы и тут могут быть конфликты поэтому как правило пишу явно указывая неймспейс. Но опять же к пример нейспейс STL можно раскрыть а другой либы например boost указывать явно. Кроме того можно "локализовывать раскрытие" допустим в пределах текущей ф-ции которая допустим использует только boost или только STL.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void func()
{
    using namespace std;
    cout<< "message" << endl;
}
 
int main()
{
   std::cout<<"Test" << std::endl;
   fun();
 
   return 0;
}


Так что глупые стили, рекомендации - лесом, руководствоваться стоит назначением и здравым смыслом в первую очередь.
1
ct0r
Игогошка!
1797 / 704 / 44
Регистрация: 19.08.2012
Сообщений: 1,365
Завершенные тесты: 1
28.10.2016, 14:03 24
Цитата Сообщение от Croessmah Посмотреть сообщение
О rel_ops.
Какая ужасная фигня
0
28.10.2016, 14:03
Croessmah
++Ͻ
15870 / 8998 / 1728
Регистрация: 27.09.2012
Сообщений: 22,122
Записей в блоге: 2
Завершенные тесты: 2
28.10.2016, 14:07 25
Цитата Сообщение от ct0r Посмотреть сообщение
Какая ужасная фигня
Никогда не пользуюсь, но как вариант такое есть.
0
ct0r
Игогошка!
1797 / 704 / 44
Регистрация: 19.08.2012
Сообщений: 1,365
Завершенные тесты: 1
28.10.2016, 14:15 26
Цитата Сообщение от Croessmah Посмотреть сообщение
Никогда не пользуюсь, но как вариант такое есть.
Если можно в Boost, то Boost.Operators для этого существует. А rel_ops это фэйл.
0
Avazart
Эксперт С++
7962 / 5783 / 571
Регистрация: 10.12.2010
Сообщений: 26,591
Записей в блоге: 17
28.10.2016, 14:32 27
Да вот интересно, как использовать подобное сугубо для одного конкретного класса?
0
Croessmah
28.10.2016, 14:40
  #28

Не по теме:

Цитата Сообщение от ct0r Посмотреть сообщение
Если можно в Boost, то Boost.Operators для этого существует.
А если можно не в Boost?
Обсуждать кубического коня в вакууме не будем.
Есть rel_ops, вот так его можно прикрутить,
ужасно это или нет, это уже другой вопрос :)
Да и где в C++ красота-то была?
Сплошной ужас, куда не глянь. :D

0
Avazart
28.10.2016, 14:43
  #29

Не по теме:

ужас как красиво )))

0
Croessmah
28.10.2016, 14:46     Стоит ли использовать "using namespace std"?
  #30

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
ужас как красиво
В начале пути было красиво,
в середине красота была до ужаса,
в конце пришли к ужасу? :D

0
28.10.2016, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 14:46
Привет! Вот еще темы с ответами:

Недавно понял, что не знаю значения "using namespace std;"
Писал программу поздравление для друга. Основывался на уроках для начинающих. В первом уроке...

Что использовать, std::cout или просто using namespace std?
Приветствую! Сейчас учу С++, постигаю азы так сказать. В арсенале две книги - Джефф Кент, ...

Использовать using namespace std; или каждый раз прописывать std:: . ?
Как безопаснее и рациональнее поступать? Как в больших проектах поступают на этот счет?


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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