155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|||||||||||
1 | |||||||||||
Std:: или using namespace std;08.10.2017, 18:43. Показов 88147. Ответов 50
Метки нет (Все метки)
Вопрос к профессионалам.
Меня давно интересуют такие вопросы: 1) Почему, многим, вроде бы не безграмотным С++-шникам, в консольных приложениях вместо одной строки : using namespace std; нравится везде перед cout, cin, endl, string и т.п. дописывать std:: ? Это стиль такой пространно-корявый, или есть какое-то логическое объяснение? 2) Почему даже в несложных программах многие спецы предпочитают вместо коротких имён давать переменным пространные имена? 3) Почему многие спецы для несложных программ вместо необходимых заголовочных файлов используют библиотеки "на все случаи жизни"? Утрируя, можно сказать, что простая программа сложения двух чисел:
0
|
08.10.2017, 18:43 | |
Ответы с готовыми решениями:
50
Использовать using namespace std; или каждый раз прописывать std:: . ? Что использовать, std::cout или просто using namespace std? Пространство имен - namespace std или std:: Зачем часто писать std::, если можно один раз using namespace std? Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream |
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||||||
08.10.2017, 18:50 | 2 | |||||
Сообщение было отмечено LVV как решение
Решение
что в коде программы пользовательский vector не переопределится на std::vector . Если тебе сильно не хочется по всему коду писать std::cin, можешь воспользоваться
1
|
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
|
|
08.10.2017, 18:53 | 4 |
1) Посмотрите внизу похожие темы. Это обсуждалось уже не раз.
2) Имена должны быть понятными. Хотя в программе из 10 строк тяжело запутаться, все равно лучше называть переменные нормально. 3) Так спецы точно не делают Спецы написали бы cstdlib, cstdio, но учитывая что они тут не нужны, ничего бы не написали. Это перебор, тут любой нормальный человек напишет либо a, b, sum, либо first, second, sum. И отступов в вашем коде не хватает - так спецы точно не пишут.
1
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
08.10.2017, 18:54 | 5 |
Потому что лень писать в комментарии расшифровку того, что в коротком имени зашифровано и для чего данная переменная предназначена.
1
|
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
|
|
08.10.2017, 18:56 | 7 |
1) неймспейсы для того и нужны чтоб раскидать имена в пространства имён. Если вам захочется определить свой класс который тоже называется cout то можете это сделать реализовав его в другом пространстве имен, иначе будет конфликт имен.
2) привычка и/или перфекционизм, наверное... 3) не понял вопрос. где какая библиотека нужна ту и надо использовать а не включать лишнее
1
|
4017 / 2563 / 430
Регистрация: 09.09.2017
Сообщений: 11,404
|
|
08.10.2017, 19:28 | 8 |
1) а мне stdio.h более по нраву
2) Хорошая привычка. В реальных программах хорошие программисты дают переменным осмысленные имена. Сложнее запутаться в алгоритме, да и другие быстрее поймут. Вот и в школьных программах уже по привычке называют переменные осмысленно - хотя бы 3-10 символов. Разумеется, есть типичные применения вроде i,j,k для счетчиков цикла. 3) Это скорее для школьных задач или отладки. Когда не знаешь заранее какой набор библиотек потребуется, а экономить объем/скорость не надо. Вот и подключают на все случаи жизни.
1
|
Неэпический
|
||||||
08.10.2017, 19:47 | 9 | |||||
using namespace std
Уменьшаем шанс конфликта имен. Для мелких проектов с известным контекстом можно и воспользоваться, но привычкам не изменяем. Ну и using namespace может пригодится для других вещей. Н п т н п с б о. Поняли фразу? Таких библиотек не существует в природе. Или так:
1
|
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
|
|
08.10.2017, 23:06 | 10 |
Дал я своему знакомому реализацию своих матриц.
А он долбанул туда std и мои неймспейсы. А потом доказывал мне два часа, что функция tanh у меня кривая, мол ничего не компилиться)
1
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
|
08.10.2017, 23:22 | 11 |
Некоторые классы stl и boost`а только namespace`ом и отличаются)
1
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
09.10.2017, 16:45 [ТС] | 12 |
На счет "осмысленных имён" понятно.
Но ведь Visual Studio позволяет переменным и константам присваивать имена кириллицей. Почему никто этим никогда не пользуется, хотя бы в процессе обучения? Новичкам легче было бы отличить служебные слова языка программирования от придуманных программистом имён и идентификаторов. Или Вы считаете, что нужно сразу писать коды под "международный уровень" и пичкать этим новичков? Предвижу возражения, мол не нужно привыкать к неправильному стилю, не соответствующему стандартам С/С++. Выходит, что в корпорации Microsoft все настолько глупы, что позволяют от этих самых стандартов отходить?
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
09.10.2017, 17:16 | 13 |
Не по теме:
Добавлено через 8 минут Общее соображение такого, что любой мастер в любом деле со временем нарабатывает определённый стиль. Этот стиль вбирает в себя весь опыт мастера, все его ошибки и неудачи. Его стиль будет эффективным, но не всегда оптимальным. Зато его решения будут, как правило, работать почти всегда. И стиль его именно такой потому что он со временем набрал в свой багаж то, что работает хорошо и работает почти всегда. Однажды вы назовёте переменные кириллицей, а потом будете плеваться, когда вам станет необходимо перекомпилировать свой код другим компилятором. В следующий раз вы не то что не станете пользоваться кириллицей, а даже не задумаетесь о такой возможности... Если мастер не делает чего-то очевидного, скорее всего это означает, что там есть подводные камни, на которые мастер уже наступал. Возможно ни один раз... Добавлено через 4 минуты Отвечая на вопрос, почему то или иное не используется что-либо в учебных целях, следует помнить, что мастер никогда не станет учить абстракции. Он будет учить тому, как он делает сам. Он сам может быть давно забыл, почему он не пишет using namespace std ... Но, обучая новичков... Он тоже не станет этого делать. Просто потому, что не станет над этим задумываться.
0
|
Неэпический
|
|
09.10.2017, 17:37 | 14 |
1) Не все пользуются VS.
2) Ковырять другие редакторы и компиляторы на поддержку кириллицы - далеко не для новичков занятие. 3) В топку любую кириллицу из кода. 4) Круто будет, если разные редакторы захотят в разной кодировке работать с файлом. 5) Хочется постоянно переключаться между языками? 6) Все программисты - русские. Это же очевидно. Было бы круто! Ага. Они даже в последнее время стали исправляться и всё больше к стандартам приближаться. А как кирилические имена относятся к стандарту? Может приведете нам цитату из стандарта, запрещающую использовать кириллические имена?
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
09.10.2017, 19:47 | 15 | |||||
2.3 Character sets
если в кратце: для имен стандарт определяет буковки английского алфавита, знак подчеркивания, и циферки. причем имя не должно начинаться с циферки. так же, стандарт определяет все доступное множество символов. если вкратце - сишная локаль. то бишь английский алфавит, циферки, плюс кучка символов управляющих последовательностью ('\n' '\0' , etc) все прочее - от лукавого каель умеет русские имена в переменных. но это же каель. ещё бы он не умел. он умеет все, что не нужно уметь. а вот мингв/гцц/шланг могут послать нафиг даже за такое:
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
09.10.2017, 20:05 | 17 |
мне это ни о чем не говорит.
я вижу лишь какую то двухбайтовую ботву. идентификаторы - точно не поддерживают. ну или приведите пример. другое дело: 1. берем гцц/мингв 2. берем исходник в кодировке 1251 3. пишем: std::cout << "привет"; 4. наслаждаемся матюгами от компилятонра. 5. ПРОФИТ???!!!
0
|
4017 / 2563 / 430
Регистрация: 09.09.2017
Сообщений: 11,404
|
|
09.10.2017, 20:15 | 18 |
Да не должны вроде. Вот вывести вместо русского текста какую-то фигню они могут, но чтобы посылать...
0
|
Неэпический
|
|||||||||||
09.10.2017, 21:05 | 19 | ||||||||||
clang жрет без проблем. У mingw (gcc) проблемы с этим. Когда-то висела бага такая на багтрекере. Сейчас не знаю. Но можно кодом указать (об этом написано в Character sets, как же Вы читали?):
-fextended-identifiers .Ну и можно глянуть на страничку http://en.cppreference.com/w/c... dentifiers Тогда удачи!
0
|
4017 / 2563 / 430
Регистрация: 09.09.2017
Сообщений: 11,404
|
|
09.10.2017, 22:03 | 20 |
И правильно, ибо нефиг. Ухудшают читаемость исходника почем зря... Понравилось бы читать исходник с китайскими названиями переменных?
0
|
09.10.2017, 22:03 | |
09.10.2017, 22:03 | |
Помогаю со студенческими работами здесь
20
Std и using namespace std Можно ли как-то убрать или заменить std:: в строке std::getline(cin, str);? Поиск в std::vector < std::pair<UInt32, std::string> > ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri STL std::set, std::pair, std::make_pair Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |