С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/480: Рейтинг темы: голосов - 480, средняя оценка - 4.76
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750

Std:: или using namespace std;

08.10.2017, 18:43. Показов 89405. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос к профессионалам.
Меня давно интересуют такие вопросы:
1) Почему, многим, вроде бы не безграмотным С++-шникам, в консольных приложениях вместо одной строки :
using namespace std;
нравится везде перед cout, cin, endl, string и т.п. дописывать std:: ?
Это стиль такой пространно-корявый, или есть какое-то логическое объяснение?

2) Почему даже в несложных программах многие спецы предпочитают вместо коротких имён давать переменным пространные имена?

3) Почему многие спецы для несложных программ вместо необходимых заголовочных файлов используют библиотеки "на все случаи жизни"?

Утрируя, можно сказать, что простая программа сложения двух чисел:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b;
    c = a + b;
    cout << c << endl;
    return 0;
}
написанная руками некоторых специалистов будет выглядеть примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc, char* argv[])
{
    int FirstNumericalValue, SecondNumericalValue, Result;
    std::cin >> FirstNumericalValue;
    std::cin >> SecondNumericalValue;
    Result = FirstNumericalValue + SecondNumericalValue;
    std::cout << Result << std::endl;
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2017, 18:43
Ответы с готовыми решениями:

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

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

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

50
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.10.2017, 18:50
Лучший ответ Сообщение было отмечено LVV как решение

Решение

Цитата Сообщение от LVV Посмотреть сообщение
Это стиль такой пространно-корявый, или есть какое-то логическое объяснение?
что в коде программы пользовательский vector не переопределится на std::vector . Если тебе сильно не хочется по всему коду писать std::cin, можешь воспользоваться

C++
1
2
3
4
using std::cout;
using std::cin;
using std::endl;
using std::string;
и это уже будет считаться хорошим тоном. Т.е. указываешь строго те имена, которыми будешь пользоваться, а не "всю кучу из std".
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
08.10.2017, 18:51
Цитата Сообщение от LVV Посмотреть сообщение
Почему, многим, вроде бы не безграмотным С++-шникам, в консольных приложениях вместо одной строки
потому что это позволяет избежать ошибок пересечения имён.
Цитата Сообщение от LVV Посмотреть сообщение
Почему даже в несложных программах многие спецы предпочитают вместо коротких имён давать переменным пространные имена?
приведите пример.
Цитата Сообщение от LVV Посмотреть сообщение
Почему многие спецы для несложных программ вместо необходимых заголовочных файлов используют библиотеки "на все случаи жизни"?
приведите пример таких "спецов".
1
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
08.10.2017, 18:53
1) Посмотрите внизу похожие темы. Это обсуждалось уже не раз.
2) Имена должны быть понятными. Хотя в программе из 10 строк тяжело запутаться, все равно лучше называть переменные нормально.
3) Так спецы точно не делают

Цитата Сообщение от LVV Посмотреть сообщение
написанная руками некоторых специалистов будет выглядеть примерно так:
Цитата Сообщение от LVV Посмотреть сообщение
#include <stdlib.h>
#include <stdio.h>
Спецы написали бы cstdlib, cstdio, но учитывая что они тут не нужны, ничего бы не написали.
Цитата Сообщение от LVV Посмотреть сообщение
int FirstNumericalValue, SecondNumericalValue, Result;
Это перебор, тут любой нормальный человек напишет либо a, b, sum, либо first, second, sum.
И отступов в вашем коде не хватает - так спецы точно не пишут.
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
08.10.2017, 18:54
Цитата Сообщение от LVV Посмотреть сообщение
вместо коротких имён давать переменным пространные имена
Потому что лень писать в комментарии расшифровку того, что в коротком имени зашифровано и для чего данная переменная предназначена.
1
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
08.10.2017, 18:56
Цитата Сообщение от LVV Посмотреть сообщение
Утрируя
Не заметил к сожалению этого.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
08.10.2017, 18:56
1) неймспейсы для того и нужны чтоб раскидать имена в пространства имён. Если вам захочется определить свой класс который тоже называется cout то можете это сделать реализовав его в другом пространстве имен, иначе будет конфликт имен.

2) привычка и/или перфекционизм, наверное...

3) не понял вопрос. где какая библиотека нужна ту и надо использовать а не включать лишнее
1
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
08.10.2017, 19:28
1) а мне stdio.h более по нраву
2) Хорошая привычка. В реальных программах хорошие программисты дают переменным осмысленные имена. Сложнее запутаться в алгоритме, да и другие быстрее поймут. Вот и в школьных программах уже по привычке называют переменные осмысленно - хотя бы 3-10 символов. Разумеется, есть типичные применения вроде i,j,k для счетчиков цикла.
3) Это скорее для школьных задач или отладки. Когда не знаешь заранее какой набор библиотек потребуется, а экономить объем/скорость не надо. Вот и подключают на все случаи жизни.
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
08.10.2017, 19:47
Цитата Сообщение от LVV Посмотреть сообщение
using namespace std;
using namespace std
Цитата Сообщение от LVV Посмотреть сообщение
или есть какое-то логическое объяснение?
Уменьшаем шанс конфликта имен.
Для мелких проектов с известным контекстом
можно и воспользоваться, но привычкам не изменяем.
Ну и using namespace может пригодится для других вещей.
Цитата Сообщение от LVV Посмотреть сообщение
Почему даже в несложных программах многие спецы предпочитают вместо коротких имён давать переменным пространные имена?
Н п т н п с б о. Поняли фразу?
Цитата Сообщение от LVV Посмотреть сообщение
Почему многие спецы для несложных программ вместо необходимых заголовочных файлов используют библиотеки "на все случаи жизни"?
Таких библиотек не существует в природе.
Цитата Сообщение от LVV Посмотреть сообщение
написанная руками некоторых специалистов будет выглядеть примерно так:
Или так:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <iterator>
#include <numeric>
 
int  main(int argc, char* argv[])
{
    std::cout << std::accumulate(std::istream_iterator<int>(std::cin), {}, 0);    
}
http://rextester.com/CSL98137
1
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
08.10.2017, 23:06
Цитата Сообщение от LVV Посмотреть сообщение
Почему, многим, вроде бы не безграмотным С++-шникам, в консольных приложениях вместо одной строки :
Дал я своему знакомому реализацию своих матриц.
А он долбанул туда std и мои неймспейсы.
А потом доказывал мне два часа, что функция tanh у меня кривая, мол ничего не компилиться)
1
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
08.10.2017, 23:22
Некоторые классы stl и boost`а только namespace`ом и отличаются)
1
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
09.10.2017, 16:45  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Н п т н п с б о. Поняли фразу?
На счет "осмысленных имён" понятно.
Но ведь Visual Studio позволяет переменным и константам присваивать имена кириллицей.
Почему никто этим никогда не пользуется, хотя бы в процессе обучения?
Новичкам легче было бы отличить служебные слова языка программирования от придуманных программистом имён и идентификаторов.
Или Вы считаете, что нужно сразу писать коды под "международный уровень" и пичкать этим новичков?
Предвижу возражения, мол не нужно привыкать к неправильному стилю, не соответствующему стандартам С/С++.
Выходит, что в корпорации Microsoft все настолько глупы, что позволяют от этих самых стандартов отходить?
0
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
09.10.2017, 17:16

Не по теме:

Выходит, что в корпорации Microsoft все настолько глупы, что позволяют от этих самых стандартов отходить?
Или хитры...



Добавлено через 8 минут
Общее соображение такого, что любой мастер в любом деле со временем нарабатывает определённый стиль. Этот стиль вбирает в себя весь опыт мастера, все его ошибки и неудачи. Его стиль будет эффективным, но не всегда оптимальным. Зато его решения будут, как правило, работать почти всегда. И стиль его именно такой потому что он со временем набрал в свой багаж то, что работает хорошо и работает почти всегда.

Однажды вы назовёте переменные кириллицей, а потом будете плеваться, когда вам станет необходимо перекомпилировать свой код другим компилятором. В следующий раз вы не то что не станете пользоваться кириллицей, а даже не задумаетесь о такой возможности...

Если мастер не делает чего-то очевидного, скорее всего это означает, что там есть подводные камни, на которые мастер уже наступал. Возможно ни один раз...

Добавлено через 4 минуты
Отвечая на вопрос, почему то или иное не используется что-либо в учебных целях, следует помнить, что мастер никогда не станет учить абстракции. Он будет учить тому, как он делает сам. Он сам может быть давно забыл, почему он не пишет using namespace std... Но, обучая новичков... Он тоже не станет этого делать. Просто потому, что не станет над этим задумываться.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 17:37
Цитата Сообщение от LVV Посмотреть сообщение
Но ведь Visual Studio позволяет переменным и константам присваивать имена кириллицей.
1) Не все пользуются VS.
2) Ковырять другие редакторы и компиляторы на поддержку кириллицы - далеко не для новичков занятие.
3) В топку любую кириллицу из кода.
4) Круто будет, если разные редакторы захотят в разной кодировке работать с файлом.
5) Хочется постоянно переключаться между языками?
6) Все программисты - русские. Это же очевидно.
Цитата Сообщение от LVV Посмотреть сообщение
что нужно сразу писать коды под "международный уровень"
Было бы круто!
Цитата Сообщение от LVV Посмотреть сообщение
Выходит, что в корпорации Microsoft все настолько глупы, что позволяют от этих самых стандартов отходить?
Ага. Они даже в последнее время стали исправляться и всё больше к стандартам приближаться.
А как кирилические имена относятся к стандарту?
Может приведете нам цитату из стандарта, запрещающую использовать кириллические имена?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 19:47
Цитата Сообщение от Croessmah Посмотреть сообщение
Может приведете нам цитату из стандарта, запрещающую использовать кириллические имена?
2.3 Character sets

если в кратце:
для имен стандарт определяет буковки английского алфавита,
знак подчеркивания,
и циферки.
причем имя не должно начинаться с циферки.

так же, стандарт определяет все доступное множество символов.
если вкратце - сишная локаль.
то бишь английский алфавит, циферки,
плюс кучка символов управляющих последовательностью
('\n' '\0' , etc)

все прочее - от лукавого additional members are locale-specific.

каель умеет русские имена в переменных.
но это же каель.
ещё бы он не умел.
он умеет все, что не нужно уметь.

а вот мингв/гцц/шланг могут послать нафиг даже за такое:
C++
1
std::cout <<"привет";
если исходник не в utf-8.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 19:55
hoggy, смотрим:
2.10 Identifiers
identifier:
***identifier-nondigit
***identifier identifier-nondigit
***identifier digit
identifier-nondigit:
***nondigit
***universal-character-name
***other implementation-defined characters
nondigit: one of
***a b c d e f g h i j k l m
***n o p q r s t u v w x y z
***A B C D E F G H I J K L M
***N O P Q R S T U V W X Y Z _
digit: one of
***0 1 2 3 4 5 6 7 8 9
1 An identifier is an arbitrarily long sequence of letters and digits. Each universal-character-name in an
identifier shall designate a character whose encoding in ISO 10646 falls into one of the ranges specified
in E.1. The initial element shall not be a universal-character-name designating a character whose encoding
falls into one of the ranges specified in E.2.
Upper- and lower-case letters are different. All characters are
significant.
20
Смотрим E.1 и E.2:
Annex E (normative)
Universal character names for identifier characters

E.1 Ranges of characters allowed
00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 00D8-00F6, 00F8-00FF
0100-167F, 1681-180D, 180F-1FFF
200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F
2070-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF
3004-3007, 3021-302F, 3031-303F
3040-D7FF
F900-FD3D, FD40-FDCF, FDF0-FE44, FE47-FFFD
10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,
60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD,
B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD

E.2 Ranges of characters disallowed initially
0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F
Так что кириллические идентификаторы имеют место быть.
Цитата Сообщение от hoggy Посмотреть сообщение
а вот мингв/гцц/шланг могут послать нафиг даже за такое:
И эти тоже поддерживают юникодные идентификаторы.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 20:05
Цитата Сообщение от Croessmah Посмотреть сообщение
Смотрим E.1 и E.2:
мне это ни о чем не говорит.
я вижу лишь какую то двухбайтовую ботву.

Цитата Сообщение от Croessmah Посмотреть сообщение
И эти тоже поддерживают юникодные идентификаторы.
идентификаторы - точно не поддерживают.
ну или приведите пример.

другое дело:

1. берем гцц/мингв
2. берем исходник в кодировке 1251
3. пишем: std::cout << "привет";
4. наслаждаемся матюгами от компилятонра.
5. ПРОФИТ???!!!
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
09.10.2017, 20:15
Да не должны вроде. Вот вывести вместо русского текста какую-то фигню они могут, но чтобы посылать...
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 21:05
Цитата Сообщение от hoggy Посмотреть сообщение
идентификаторы - точно не поддерживают.
ну или приведите пример.
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    int ляляйка = 10;
    std::cout << ляляйка;
}
сохраняем в utf-8.
clang жрет без проблем.
У mingw (gcc) проблемы с этим.
Когда-то висела бага такая на багтрекере.
Сейчас не знаю.
Но можно кодом указать (об этом написано в Character sets, как же Вы читали?):
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    int \u043B\u0440\u043B\u0440\u0439\u043A\u0430 = 10;
    std::cout << \u043B\u0440\u043B\u0440\u0439\u043A\u0430;
}
Компилировать mingw с флагом -fextended-identifiers.

Ну и можно глянуть на страничку
http://en.cppreference.com/w/c... dentifiers
Note: C++ grammar formally requires Unicode characters to be escaped with \u or \U, but due to translation phase 1, that is exactly how raw unicode characters from the source code are presented to the compiler. Also note that support of this feature may be limited, e.g. gcc
Цитата Сообщение от Croessmah Посмотреть сообщение
И эти тоже поддерживают юникодные идентификаторы.
Цитата Сообщение от hoggy Посмотреть сообщение
2. берем исходник в кодировке 1251
Никакой коллизии не возникло?

Цитата Сообщение от hoggy Посмотреть сообщение
мне это ни о чем не говорит.
Тогда удачи!
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
09.10.2017, 22:03
Цитата Сообщение от Croessmah Посмотреть сообщение
У mingw (gcc) проблемы с этим.
И правильно, ибо нефиг. Ухудшают читаемость исходника почем зря... Понравилось бы читать исходник с китайскими названиями переменных?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2017, 22:03
Помогаю со студенческими работами здесь

Зачем часто писать std::, если можно один раз using namespace std?
зачем часто писать std:: если можно один раз using namespace std?

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...

Std и using namespace std
Здравтсвуйте, я не из тех если кому то сказали так надо, а те и пишут что им дали.Поэтому я бы хотел спросить: std это пространство имен...

Можно ли как-то убрать или заменить std:: в строке std::getline(cin, str);?
Нужно программа без std:: #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include &lt;string&gt;...

Поиск в std::vector < std::pair<UInt32, std::string> >
Подскажите пожалуйста, как осуществить поиск элемента в std::vector &lt; std::pair&lt;UInt32, std::string&gt; &gt; по ключу, а...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru