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

Std:: или using namespace std;

08.10.2017, 18:43. Показов 90140. Ответов 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
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.11.2017, 12:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от LVV Посмотреть сообщение
Пример отсюда
а то, что это не с++, вас не смущает?
0
 Аватар для COKPOWEHEU
4142 / 2720 / 433
Регистрация: 09.09.2017
Сообщений: 12,054
01.11.2017, 12:52
Цитата Сообщение от LVV Посмотреть сообщение
Цитата Сообщение от LVV Посмотреть сообщение
microsoft
О да, эти любят вводить собственные длинные имена взамен стандартных. Причем ладно бы с пользой, так нет: какой смысл вводить HANDLE вместо void*? Если бы этот HANDLE использовался для чего-то конкретного, скажем, только дескриптор окна, или файла, или процесса, а для чего-то другого - другой тип, это можно было бы понять, но когда он используется вообще для всего?
Или введение LPCSTR вместо обычного char[], не говоря уж о всяких DWORDLONG, который на самом деле uint64_t
Ну и куда же без десятка параметров для простейшей функции вроде открытия файла.
В результате вызов одной функции растягивается на несколько строк без всякой надобности и с проблемами чтения.
0
 Аватар для Nishen
1359 / 857 / 366
Регистрация: 26.02.2015
Сообщений: 3,831
01.11.2017, 14:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
LPCSTR
Ни читать, ни писать такое не удобно. :-(
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
02.11.2017, 08:52
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Или введение LPCSTR вместо обычного char[], не говоря уж о всяких DWORDLONG, который на самом деле uint64_t
мне кажется, это наследство Си.
Все таки winAPI - это Си, а не С++.
Текст в верхнем регистре - видимо во избежания пересечения имен. Делали в своем стиле, что бы гарантированно минимизировать конфликты с чужим ПО.
Да и что делать, если после обновления стандарта, char станет 16 бит? или если я начну компилить свою прогу на компиляторе, у которого разрядность char иная? Для этого и нужен макрос. Он должен проверить компилятор и выставить нужный define

а вот LPCSTR или lpcstr - в обоих случаях, я считаю эту конструкцию не читабельную. Хотя как просил человек выше - она соотвествует нужной идеалогии.

C++
1
DWORDLONG
А у тебя есть гарантии, что unit64_t будет существовать/работать в 32 бит ОС?
Макрос для этого и делают. Что бы не менять код, в случае смены разрядности ОС.

Вот яркий пример из моей практики, на случай, если char будет не равен одному байту.
C++
1
2
3
4
5
#if CHAR_BIT_ == 8
#   define byte_ char
#else
/*...*/
#endif
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
02.11.2017, 12:54
Цитата Сообщение от Valeryn Посмотреть сообщение
если char будет не равен одному байту.
char - всегда один байт.
Другое дело, что байт может быть не 8 бит.
0
 Аватар для COKPOWEHEU
4142 / 2720 / 433
Регистрация: 09.09.2017
Сообщений: 12,054
02.11.2017, 13:08
Цитата Сообщение от Valeryn Посмотреть сообщение
Да и что делать, если после обновления стандарта, char станет 16 бит?
Разработчики стандарта не дураки так ломать совместимость. Если надо увеличить размер char введут новый тип вроде wchar.
Цитата Сообщение от Valeryn Посмотреть сообщение
А у тебя есть гарантии, что unit64_t будет существовать/работать в 32 бит ОС?
Он даже под 8-битные архитектуры существует. И, кажется, входит в стандарт. В отличие от.
Цитата Сообщение от Valeryn Посмотреть сообщение
Вот яркий пример из моей практики, на случай, если char будет не равен одному байту.
Лучше бы вы привели ситуацию, когда char не равен 1 байту, а не пример ее обхода.
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
02.11.2017, 15:23
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Разработчики стандарта не дураки так ломать совместимость. Если надо увеличить размер char введут новый тип вроде wchar.
Цитата Сообщение от Croessmah Посмотреть сообщение
char - всегда один байт
Кстати да, но если память меня не подводит, то все звучит так, не?)
char <= short <= int <= long
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Он даже под 8-битные архитектуры существует. И, кажется, входит в стандарт. В отличие от.
в С89 его нет. Появился он с С99 версии стандарта.
А Visual Studio только С89 поддерживает кстати Хоть и имеет stdint.h

Все эти макросы не по приколу придуманные)
В том де Qt в qglobal.h много подобного.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#if defined(QT_COORD_TYPE)
typedef QT_COORD_TYPE qreal;
#elif defined(QT_NO_FPU) || defined(QT_ARCH_ARM) || defined(QT_ARCH_WINDOWSCE) || defined(QT_ARCH_SYMBIAN)
typedef float qreal;
#else
typedef double qreal;
#endif
#if defined(Q_OS_WIN) && !defined(Q_CC_GNU) && !defined(Q_CC_MWERKS)
#  define Q_INT64_C(c) c ## i64    /* signed 64 bit constant */
#  define Q_UINT64_C(c) c ## ui64   /* unsigned 64 bit constant */
typedef __int64 qint64;            /* 64 bit signed */
typedef unsigned __int64 quint64;  /* 64 bit unsigned */
#else
#  define Q_INT64_C(c) static_cast<long long>(c ## LL)     /* signed 64 bit constant */
#  define Q_UINT64_C(c) static_cast<unsigned long long>(c ## ULL) /* unsigned 64 bit constant */
typedef long long qint64;           /* 64 bit signed */
typedef unsigned long long quint64; /* 64 bit unsigned */
#endif
0
 Аватар для COKPOWEHEU
4142 / 2720 / 433
Регистрация: 09.09.2017
Сообщений: 12,054
02.11.2017, 22:07
Цитата Сообщение от Valeryn Посмотреть сообщение
А Visual Studio только С89 поддерживает кстати Хоть и имеет stdint.h
Если так уж хочется поддерживать совместимость со всякой древностью, можно и переопределить эти типы.
Цитата Сообщение от Valeryn Посмотреть сообщение
В том де Qt в qglobal.h много подобного.
А еще в OpenGL есть glint, glfloat и прочие. Но это кроссплатформенные системы, вынужденные поддерживать совместимость с разнообразными компиляторами и стандартами. Да и сами имена в них ненамного длиннее стандартных (если вспомнить с чего началась дискуссия).
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
02.11.2017, 22:33
COKPOWEHEU, типы intN_t/uintN_t являются необязательными к реализации в C99 (C11 под рукой нет).
В C++11/14 типы intN_t/uintN_t также являются опциональными.
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
03.11.2017, 15:33
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если так уж хочется поддерживать совместимость со всякой древностью, можно и переопределить эти типы.
Это я все к тому веду, что специальные типы майкрософт не по приколу ввела, а как раз таки для переопределения его и обратной совместимости.

Ведь где гарантии, что твое ПО через N версий будет совместимо с dll виндой, из за того что за место DWORD ты юзал uint64_t в winAPI? В итоге придется перелопачивать весь код.
Конечно это мало вероятно, что размер слова внезапно вырастит или уменьшиться, но все же.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
(если вспомнить с чего началась дискуссия).
Я начал по поводу своего не согласия с твоим высказыванием
LPCSTR вместо обычного char[], не говоря уж о всяких DWORDLONG, который на самом деле uint64_t
0
 Аватар для COKPOWEHEU
4142 / 2720 / 433
Регистрация: 09.09.2017
Сообщений: 12,054
03.11.2017, 16:08
Цитата Сообщение от Valeryn Посмотреть сообщение
Ведь где гарантии, что твое ПО через N версий будет совместимо с dll виндой, из за того что за место DWORD ты юзал uint64_t в winAPI? В итоге придется перелопачивать весь код.
Только платформо-зависимую часть, которая в хороших программах вынесена отдельно как раз для таких случаев. А там да, придется либо городить костыли, либо переделывать отдельные модули.
И, между прочим, это лучше, чем переделывать всю остальную, платформо-независимую, часть только из-за того что DWORD изменился.
Цитата Сообщение от Valeryn Посмотреть сообщение
Я начал по поводу своего не согласия с твоим высказыванием
LPCSTR вместо обычного char[], не говоря уж о всяких DWORDLONG, который на самом деле uint64_t
...которое было примером неоправданно длинных названий. Или будешь утверждать что нельзя было назвать покороче? Хотя бы u64, которое тоже нестандартное, но короткое и ясное.

Добавлено через 15 секунд
Цитата Сообщение от Valeryn Посмотреть сообщение
Ведь где гарантии, что твое ПО через N версий будет совместимо с dll виндой, из за того что за место DWORD ты юзал uint64_t в winAPI? В итоге придется перелопачивать весь код.
Только платформо-зависимую часть, которая в хороших программах вынесена отдельно как раз для таких случаев. А там да, придется либо городить костыли, либо переделывать отдельные модули.
И, между прочим, это лучше, чем переделывать всю остальную, платформо-независимую, часть только из-за того что DWORD изменился.
Цитата Сообщение от Valeryn Посмотреть сообщение
Я начал по поводу своего не согласия с твоим высказыванием
LPCSTR вместо обычного char[], не говоря уж о всяких DWORDLONG, который на самом деле uint64_t
...которое было примером неоправданно длинных названий. Или будешь утверждать что нельзя было назвать покороче? Хотя бы u64, которое тоже нестандартное, но короткое и ясное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.11.2017, 16: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; по ключу, а...


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

Или воспользуйтесь поиском по форуму:
51
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru