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

Std:: или using namespace std;

08.10.2017, 18:43. Показов 89377. Ответов 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
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
сохраняем в utf-8.
Цитата Сообщение от hoggy Посмотреть сообщение
а вот мингв/гцц/шланг могут послать нафиг даже за такое:
std::cout <<"привет";
если исходник не в utf-8.
Цитата Сообщение от hoggy Посмотреть сообщение
2. берем исходник в кодировке 1251
Цитата Сообщение от Croessmah Посмотреть сообщение
Никакой коллизии не возникло?
возникло легкое ощущение,
что кое-кто не умеет в русские буковки.

Цитата Сообщение от Croessmah Посмотреть сообщение
Ну и можно глянуть на страничку
вы юникодовый код с юникодовым символом не попутали?

теперь показывайте идентификаторы.

Цитата Сообщение от Croessmah Посмотреть сообщение
Тогда удачи!
пока-пока.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 22:04
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ухудшают читаемость исходника почем зря... Понравилось бы читать исходник с китайскими названиями переменных?
см. выше:
Цитата Сообщение от Croessmah Посмотреть сообщение
2) Ковырять другие редакторы и компиляторы на поддержку кириллицы - далеко не для новичков занятие.
3) В топку любую кириллицу из кода.
4) Круто будет, если разные редакторы захотят в разной кодировке работать с файлом.
5) Хочется постоянно переключаться между языками?
6) Все программисты - русские. Это же очевидно.
Цитата Сообщение от hoggy Посмотреть сообщение
вы юникодовый код с юникодовым символом не попутали?
Примеры для кого?
Видите там идентификаторы кириллические?
Речь как раз о них, а не о юникодных литералах:
Цитата Сообщение от LVV Посмотреть сообщение
позволяет переменным и константам присваивать имена кириллицей.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:29
Цитата Сообщение от Croessmah Посмотреть сообщение
Примеры для кого?
Видите там идентификаторы кириллические?
вижу как gcc шлёт кириллицу лесом,
даже не взирая на то,
что исходник в utf-8

а вот вы мне почему то рабочий пример
так не предоставили.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 22:30
Цитата Сообщение от hoggy Посмотреть сообщение
вижу как gcc шлёт кириллицу лесом,
даже не взирая на то,
что исходник в utf-8
Еще бы читать научились, было бы вообще хорошо:
Цитата Сообщение от Croessmah Посмотреть сообщение
У mingw (gcc) проблемы с этим.
Когда-то висела бага такая на багтрекере.
Сейчас не знаю.
Но можно кодом указать (об этом написано в Character sets, как же Вы читали?)
Цитата Сообщение от hoggy Посмотреть сообщение
а вот вы мне почему то рабочий пример
так не предоставили.
С кодами кириллицы пример тоже есть.
И цитата с cppreference тоже.

Но раз читать на научилссо, то покеда.
Беседовать со стеной не вижу смысла.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:32
Цитата Сообщение от Croessmah Посмотреть сообщение
***universal-character-name
***other implementation-defined characters
"универсальные-буковки-имена"
"другие зависящие от реализации буковки"

жосиси как бе и не обязан.

ну-ну.

Добавлено через 23 секунды
Цитата Сообщение от Croessmah Посмотреть сообщение
С кодами кириллицы пример тоже есть.
Цитата Сообщение от hoggy Посмотреть сообщение
а вот вы мне почему то рабочий пример
так не предоставили.
рабочий пример

пока-пока
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 22:33
Цитата Сообщение от hoggy Посмотреть сообщение
жосиси как бе и не обязан.
Он поддерживает ровно то, что обязан: \uNNNN и \uNNNNNN в идентификаторах.
Подробнее на cppreference по ссылочке выше.
Цитата Сообщение от hoggy Посмотреть сообщение
рабочий пример
см. выше.
Ах, да, стена же.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:35
Цитата Сообщение от Croessmah Посмотреть сообщение
Но раз читать на научилссо, то покеда.
сложно с вами, однако.

Цитата Сообщение от hoggy Посмотреть сообщение
вы юникодовый код с юникодовым символом не попутали?
теперь показывайте идентификаторы.
есть такая штука. называется "буковка".
ну или character.
а ещё есть такая штука, называется "код буковки"
разницу ощущаете?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 22:36
hoggy, ощущаете разницу, что gcc не могёт, а clang и cl могут?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:38
Цитата Сообщение от Croessmah Посмотреть сообщение
Ах, да, стена же.
ну да. у вас в голове.

Цитата Сообщение от Croessmah Посмотреть сообщение
Он поддерживает ровно то, что обязан: \uNNNN и \uNNNNNN
речь не за эту никому не упавшую хрень.

вот здесь персонаж чутка иное имел ввиду:
Цитата Сообщение от LVV Посмотреть сообщение
Но ведь Visual Studio позволяет переменным и константам присваивать имена кириллицей.
с чего и пошёл весь этот унылый разговор.
Цитата Сообщение от Croessmah Посмотреть сообщение
int ляляйка = 10;
такое впечатление, что вы дурочку включили.

Добавлено через 55 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
clang и cl могут?
ощутил однажды.
когда скормил шлангу исходник в 1251.

классная получилась разница.

см #17
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 22:39
https://gcc.gnu.org/wiki/FAQ#W... _in_GCC.3F

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
классная получилась разница.
Об этом я писал выше.
Цитата Сообщение от hoggy Посмотреть сообщение
с чего и пошёл весь этот унылый разговор.
1) Я писал еще и о clang
2) GCC поддерживает в виде кодов.
3) Заканчивай пургу гнать. В который раз сливаешься в ахинею.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 22:44
Цитата Сообщение от Croessmah Посмотреть сообщение
Заканчивай пургу гнать. В который раз сливаешься в ахинею.
факт №1
все эти расширенные символа - зависимые от реализации.
и поддерживать их компилятор не обязан.
гарантируется только английский алфавит.

факт №2
если не считать каеля, топовые компиляторы
не пропускают национальные символы в исходниках,
которые не utf-8, за искл срезаемых комментариев.

факт №3
вы не можете предоставить рабочий пример
индетификатора в киллирилце для жосиси,
даже не смотря на то, что сам исходник в utf-8

Цитата Сообщение от Croessmah Посмотреть сообщение
В который раз сливаешься в ахинею.
деццкий садик.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
09.10.2017, 23:18
Цитата Сообщение от hoggy Посмотреть сообщение
все эти расширенные символа - зависимые от реализации.
и поддерживать их компилятор не обязан.
С C99 появились идентификаторы \uNNNN и \uNNNNNN,
на cppreference есть более подробное описание.
Ссылка и цитата оттуда также присутствуют выше.
Цитата Сообщение от hoggy Посмотреть сообщение
вы не можете предоставить рабочий пример
Предоставил выше с кодами.
То, что GCC не могёт прямую кириллицу,
так оно (mingw) и не стандартные локали не могёт.
И чё теперь значит, что нестандартные локали нельзя?
Цитата Сообщение от hoggy Посмотреть сообщение
индетификатора в киллирилце для жосиси
В GCC только коды кириллицы.
Это в который раз я написал, в третий?
Но стену не пробить, как всегда.
Выше по ссылке есть примерчик с предварительной
конвертацией исходника с помощь Perl.
Там же есть ссылка на багтреккер gcc,
где более детальное обсуждение имеется.


Но, скажем так, топор тонет сразу и всплывать не хочет.

Добавлено через 4 минуты
Цитату приведу оттуда:
What is the status of adding the UTF-8 support for identifier names in GCC?

Since GCC 5, the option -fextended-identifiers is enabled by default for C++, and for C99 and later C versions. This only supports UCNs in identifiers, not extended characters represented other than with UCNs. Support for actual UTF-8 in identifiers is still pending (please contribute!)

So how do you express UCN in the code? By using the \uNNNN or \UNNNNNNNN syntax. For example, pipe your code through

perl -pe 'BEGIN { binmode STDIN, ":utf8"; } s/(.)/ord($1) < 128 ? $1 : sprintf("\\U%08x", ord($1))/ge;'
or something similar to convert extended characters to UCNs.

A longer example:


C++
1
2
3
4
5
6
7
8
//file UCN_almost_UTF8_identifiers.cpp
 
#include<iostream>
int main()
{
       double ИЕРОГЛИФЫ(0);
       std::cout << "ИЕРОГЛИФЫ= " << ИЕРОГЛИФЫ << "\n";
}
Code
1
2
3
4
5
6
7
8
9
10
// with following makefile:
 
UCN_almost_UTF8_identifiers: UCN_almost_UTF8_identifiers.cpp
       to_UCN.sh UCN_almost_UTF8_identifiers.cpp
       g++ -fextended-identifiers -o UCN_almost_UTF8_identifiers /tmp/UCN_almost_UTF8_identifiers.cpp
 
//and the helper script: to_UCN.sh:
 
#!/bin/bash
cat $1 | perl -pe 'BEGIN { binmode STDIN, ":utf8"; } s/(.)/ord($1) < 128 ? $1 : sprintf("\\U%08x", ord($1))/ge;' > /tmp/$1
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 23:25
Цитата Сообщение от Croessmah Посмотреть сообщение
То, что GCC не могёт прямую кириллицу,
так оно (mingw) и не стандартные локали не могёт.
И чё теперь значит, что нестандартные локали нельзя?
нельзя, если нужна кросс-платформа.

нельзя ничего, что не гарантируется стандартом.

а гарантируется только сишная локаль,
и английские буковки.
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
09.10.2017, 23:36
а какая реальная польза от поддержки этих фич есть?
мне вот в голову только шапоклячьи приколы приходят, где в имена скажем функций добавлять буковки, которые выглядят как из ASCII, то таковыми не являются.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.10.2017, 23:45
Цитата Сообщение от DU3 Посмотреть сообщение
а какая реальная польза от поддержки этих фич есть?
см #17
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.10.2017, 00:20
Цитата Сообщение от DU3 Посмотреть сообщение
а какая реальная польза от поддержки этих фич есть?
https://softwareengineering.st... fiers-in-c


To preserve a high degree of compatibility, a few minor changes to the language were introduced in collaboration with the C standards committee:
...
UCN changes [N2170==07-0030] “lift the prohibitions on control and basic source universal character names within character and string literals.”
1
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
10.10.2017, 00:21
понятно. но я бы предпочел какую-нибудь уродливую ключевую конструкцию для таких кейсов и исключение для строк, но не распространение этих правил глобально.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.10.2017, 01:16
Цитата Сообщение от DU3 Посмотреть сообщение
я бы предпочел какую-нибудь уродливую ключевую конструкцию для таких кейсов и исключение для строк, но не распространение этих правил глобально.
локали - глобальная проблема ЯП вообще.

но плюсы здесь зашли в тупик окончательно и бесповоротно.
0
 Аватар для LVV
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
01.11.2017, 11:52  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
Цитата Сообщение от LVV Посмотреть сообщение
Почему даже в несложных программах многие спецы предпочитают вместо коротких имён давать переменным пространные имена?
приведите пример.
Пример отсюда: https://msdn.microsoft.com/ru-... 82216.aspx
using System;
namespace MaintainabilityLibrary
{
class MatchingNames
{
int someField;

void SomeMethodOne(int someField) {}

void SomeMethodTwo()
{
int someField;
}
}
}


Цитата Сообщение от Новичок Посмотреть сообщение
2) Имена должны быть понятными.
А команды, функции, операторы разве не должны быть понятными?
Язык С++ привлекает своей лаконичностью:
iostream вместо InputOutputStream
std вместо Standard
cin вместо ConsoleInput
cout вместо ConsoleOutput
endl вместо EndLine
и так далее...
И вдруг среди этой лаконичности пространные имена переменных и функций.
Это тоже самое, что на русском написать:
выв << ПервоеЧисло плс ВтороеЧисло << кстр;
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
01.11.2017, 12:08
Что лучше.
C++
1
std::cin << serializeUnitObject(convertRawDataUnitToObject(unit[i])) << std::endl;
или
C++
1
std::cin << serUO(convDUTO(unit[i])) << std::endl;
?

Одно дело, это абстрактные термины, обобщенные.
А другое дело, когда это что-то узкоспециализированное. Где нужны детальные уточнения. Что сеарилизуется и во что. Что конвертируется и во что.
Что это за обьект и как взаимодействует с тем или иным обеъктом. Или что это за коннектор и с какими типами обьектов он взаимодействует.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2017, 12:08
Помогаю со студенческими работами здесь

Зачем часто писать 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; по ключу, а...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
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. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru