Форум программистов, компьютерный форум CyberForum.ru

Почему так? - C++

Восстановить пароль Регистрация
 
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.05.2013, 00:04     Почему так? #1
Я вот уже довольно много времени читаю книги и разные коды по программированию, но все так и не понял. Почему хорошие программисты используют запись
C++
1
std::
а не просто в начале написать
C++
1
using namespace std;
??
В чем принципиальное различие между этими двумя записями и какую лучше применять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 00:04     Почему так?
Посмотрите здесь:

Объясните почему так C++
C++ Подскажите почему так?
C++ Объясните почему так
C++ Почему так отображается массив?
Почему так? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11816 / 6795 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
09.05.2013, 00:07     Почему так? #2
Цитата Сообщение от metaluga145 Посмотреть сообщение
В чем принципиальное различие между этими двумя записями
второе сваливает всё пространство имен std в глобальное пространство. А оно надо?
Цитата Сообщение от metaluga145 Посмотреть сообщение
и какую лучше применять?
лично я применяю первое.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
09.05.2013, 00:10     Почему так? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace A
{
    void func(void)
    {
        ....
     }
}
 
void func(void)
{ 
 ...
}
using namespace A;
 
int main()
{
    func();
}
какой func() вызовется?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 00:12     Почему так? #4
metaluga145,
Цитата Сообщение от metaluga145 Посмотреть сообщение
Почему хорошие программисты используют запись std::
Это не так, всё зависит от задачи. Например, если вам нужно посоревноваться, то там обычно используют using namespace std; Т.к. Каждый раз таскать в коде std:: ко всем контейнерам, выводам, встроенным алгоритмам очень долго, более того, на таких соревнованиях создаются специальный макросы, дефайны, для ускорения кодинга(ведь на олимпиадах отводится крайне мало времени, чтобы думать о том, как лучше написать), которые, ни в коем случае, нельзя применять производстве. В производстве код должен быть очень красивым и чётким, а так же max оптимизированным.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 00:12     Почему так? #5
Если программа простая (небольшая), и в ней явно не может быть наложения имен, или ты просто не желаешь использовать имена классов/конейнеров и т.п. из std в своей программе то логично использовать using namespace std;
Я руководствуюсь только этим.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.05.2013, 10:22     Почему так? #6
Цитата Сообщение от metaluga145 Посмотреть сообщение
В чем принципиальное различие между этими двумя записями и какую лучше применять?
Понимаете, в чем дело. Хороших, годных существительных и глаголов довольно немного в рамках крупной предметной области, и в большом проекте они наверняка начнут пересекаться. Вот чтобы можно было их отличать, и придумали namespace'ы.

Пример. (Кажется я его уже где-то приводил). Крупное веб-приложение для торговли на бирже. Годное слово -- account. Обозначает как счет в банке, так и аккаунт пользователя. Поэтому его разносят в разные неймспейсы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace User {
  class Account {
  };
};
namespace Bank {
  class Account {
    private:
      User::Account userAccount;
  };
};
 
...
User::Account userAccount;
Bank::Account bankAccount;
В реальной коммерческой жизни читаемость, гибкость и простота модифицируемости кода (maintainability) гораздо важнее скорости его генерации и даже, о ужас, производительности кода. Потому что бизнес не простит провала по срокам сдачи проекта. Вот поэтому и пишут так, чтобы как можно легче было читать код. С полными и осмысленными именами идентификаторов. Неймспейсы в этом еще слегка помогают.
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 10:44     Почему так? #7
Цитата Сообщение от Croessmah Посмотреть сообщение
второе сваливает всё пространство имен std в глобальное пространство. А оно надо?

лично я применяю первое.
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
09.05.2013, 10:57     Почему так? #8
Цитата Сообщение от Тельман Посмотреть сообщение
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
сложно наверно все посты прочесть было
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 11:15     Почему так? #9
Цитата Сообщение от Miwa123 Посмотреть сообщение
сложно наверно все посты прочесть было
Я прочел все посты, но там не сказано об объявлении типа using std::"оператор". Может "покажешь" где об этом было написано?
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 11:18     Почему так? #10
Цитата Сообщение от Тельман Посмотреть сообщение
но там не сказано об объявлении типа using std::"оператор"
Там есть ответ на этот вопрос. Ты просто не желаешь этого понять.
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 11:22     Почему так? #11
Цитата Сообщение от lazybiz Посмотреть сообщение
Там есть ответ на этот вопрос. Ты просто не желаешь этого понять.
АААА...Я не могу найти найти выше про это=((
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11816 / 6795 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
09.05.2013, 11:37     Почему так? #12
Цитата Сообщение от Тельман Посмотреть сообщение
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
Я предпочитаю видеть какому пространству принадлежит имя, а не прыгать по файлу в поисках ответа на простой вопрос - строчка
C++
1
vector<int> vec;
подразумевает использование std::vector, boost::vector или другой какой-то контейнер, а может вообще имеется ввиду вектор в пространстве...
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 11:40     Почему так? #13
Croessmah, std::vector <int> = p(3); - вектор в пространстве 3d, std::vector <int> = p(n); - вектор n-мерного пространства, но я бы не использовал их для маломерных пространств
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 19:41     Почему так?
Еще ссылки по теме:

Не могу разобраться почему так C++
C++ While и for, почему так?
C++ Бинарный код: почему так?

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.05.2013, 19:41     Почему так? #14
Ternsip, речь не об этом шла ведь. Вдруг это vector из какой-нибудь MegaSuperCollGraphicLibrary?
Yandex
Объявления
13.05.2013, 19:41     Почему так?
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru