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

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

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

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

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

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

Почему так работает, а так нет? - C++
так работает // Возведение b в степень s по модулю m float powmod(float b, long s) { float c=1; while (s) {

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; } В тестах...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
09.05.2013, 00:07 #2
Цитата Сообщение от metaluga145 Посмотреть сообщение
В чем принципиальное различие между этими двумя записями
второе сваливает всё пространство имен std в глобальное пространство. А оно надо?
Цитата Сообщение от metaluga145 Посмотреть сообщение
и какую лучше применять?
лично я применяю первое.
1
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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() вызовется?
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 00:12 #4
metaluga145,
Цитата Сообщение от metaluga145 Посмотреть сообщение
Почему хорошие программисты используют запись std::
Это не так, всё зависит от задачи. Например, если вам нужно посоревноваться, то там обычно используют using namespace std; Т.к. Каждый раз таскать в коде std:: ко всем контейнерам, выводам, встроенным алгоритмам очень долго, более того, на таких соревнованиях создаются специальный макросы, дефайны, для ускорения кодинга(ведь на олимпиадах отводится крайне мало времени, чтобы думать о том, как лучше написать), которые, ни в коем случае, нельзя применять производстве. В производстве код должен быть очень красивым и чётким, а так же max оптимизированным.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 00:12 #5
Если программа простая (небольшая), и в ней явно не может быть наложения имен, или ты просто не желаешь использовать имена классов/конейнеров и т.п. из std в своей программе то логично использовать using namespace std;
Я руководствуюсь только этим.
0
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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) гораздо важнее скорости его генерации и даже, о ужас, производительности кода. Потому что бизнес не простит провала по срокам сдачи проекта. Вот поэтому и пишут так, чтобы как можно легче было читать код. С полными и осмысленными именами идентификаторов. Неймспейсы в этом еще слегка помогают.
0
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 10:44 #7
Цитата Сообщение от Croessmah Посмотреть сообщение
второе сваливает всё пространство имен std в глобальное пространство. А оно надо?

лично я применяю первое.
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
0
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
09.05.2013, 10:57 #8
Цитата Сообщение от Тельман Посмотреть сообщение
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
сложно наверно все посты прочесть было
0
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 11:15 #9
Цитата Сообщение от Miwa123 Посмотреть сообщение
сложно наверно все посты прочесть было
Я прочел все посты, но там не сказано об объявлении типа using std::"оператор". Может "покажешь" где об этом было написано?
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.05.2013, 11:18 #10
Цитата Сообщение от Тельман Посмотреть сообщение
но там не сказано об объявлении типа using std::"оператор"
Там есть ответ на этот вопрос. Ты просто не желаешь этого понять.
1
Quadrillionaire
13 / 13 / 1
Регистрация: 09.03.2013
Сообщений: 180
09.05.2013, 11:22 #11
Цитата Сообщение от lazybiz Посмотреть сообщение
Там есть ответ на этот вопрос. Ты просто не желаешь этого понять.
АААА...Я не могу найти найти выше про это=((
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
09.05.2013, 11:37 #12
Цитата Сообщение от Тельман Посмотреть сообщение
Но писать каждый раз перед оператором "std::" не удобно ведь. Не проще просто в начале объявить "using std::cout"? Или я не прав?
Я предпочитаю видеть какому пространству принадлежит имя, а не прыгать по файлу в поисках ответа на простой вопрос - строчка
C++
1
vector<int> vec;
подразумевает использование std::vector, boost::vector или другой какой-то контейнер, а может вообще имеется ввиду вектор в пространстве...
1
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-мерного пространства, но я бы не использовал их для маломерных пространств
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.05.2013, 19:41 #14
Ternsip, речь не об этом шла ведь. Вдруг это vector из какой-нибудь MegaSuperCollGraphicLibrary?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 19:41
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2013, 19:41
Ответ Создать тему
Опции темы

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