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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
#1

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

09.05.2013, 00:04. Просмотров 445. Ответов 13
Метки нет (Все метки)

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

While и for, почему так? - C++
#include <iostream> using namespace std; #include <conio.h> int main() { for(int counter = 1;counter <=10;counter++) ...

Почему так? - C++
Почему значение psumma равняется нулю? if (e>0) { int k = 0; double psumma = -1; cout<<"k =...

Подскажите почему так? - C++
Я конечно новичок в с++, но чего-то это уже совсем.. Почему строка cout << 1/2; выводит "0" ?

Объясните почему так - C++
Когда я ввожу следующие числа: x = 2222222222 n = 3333333333 И x = 2222222221 (один знак поменяли) n = 3333333333 То...

Объясните почему так - C++
#include <iostream> using namespace std; #define MAT(a,b) a/b; int main() { cout<<2*MAT(2+5,3); return 0; } В тестах...

почему это так работает - C++
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99 for (i = 0; i < 1000; i++) { cout <<a<<" "; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.05.2013, 00:07     Почему так? #2
Цитата Сообщение от metaluga145 Посмотреть сообщение
В чем принципиальное различие между этими двумя записями
второе сваливает всё пространство имен std в глобальное пространство. А оно надо?
Цитата Сообщение от metaluga145 Посмотреть сообщение
и какую лучше применять?
лично я применяю первое.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,165
Завершенные тесты: 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
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 00:12     Почему так? #4
metaluga145,
Цитата Сообщение от metaluga145 Посмотреть сообщение
Почему хорошие программисты используют запись std::
Это не так, всё зависит от задачи. Например, если вам нужно посоревноваться, то там обычно используют using namespace std; Т.к. Каждый раз таскать в коде std:: ко всем контейнерам, выводам, встроенным алгоритмам очень долго, более того, на таких соревнованиях создаются специальный макросы, дефайны, для ускорения кодинга(ведь на олимпиадах отводится крайне мало времени, чтобы думать о том, как лучше написать), которые, ни в коем случае, нельзя применять производстве. В производстве код должен быть очень красивым и чётким, а так же max оптимизированным.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 00:12     Почему так? #5
Если программа простая (небольшая), и в ней явно не может быть наложения имен, или ты просто не желаешь использовать имена классов/конейнеров и т.п. из std в своей программе то логично использовать using namespace std;
Я руководствуюсь только этим.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.05.2013, 11:37     Почему так? #12
Цитата Сообщение от Тельман Посмотреть сообщение
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
Я предпочитаю видеть какому пространству принадлежит имя, а не прыгать по файлу в поисках ответа на простой вопрос - строчка
C++
1
vector<int> vec;
подразумевает использование std::vector, boost::vector или другой какой-то контейнер, а может вообще имеется ввиду вектор в пространстве...
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++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; int main() { const int nstr=2, nstb=2; int mas; int i, j; ...

Не могу разобраться почему так - C++
Добрый вечер! Пишу программу, обычное задание из книги Прата. Суть задания: спомощью вложенных циклов, по запрашиваемому значению, вывести...

потоки почему так происходит ? - C++
Господа делаю воспроизведение основной музыки в программе , а затем в отдельный поток делаю воспроизвеление другого звука , так вот звук...

Бинарный код: почему так? - C++
Бинарный код числа 5 равен 111001. Не пойму, почему 111001 вместо 001001? Что означают первые две единицы? Почему не нули вместо первых...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru