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

Std:: или using namespace std;

08.10.2017, 18:43. Показов 90115. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru