Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/149: Рейтинг темы: голосов - 149, средняя оценка - 4.85
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
1

Вопрос про std::

07.03.2010, 19:01. Просмотров 28920. Ответов 21
Метки нет (Все метки)

C++
1
 std::cout << "Hello, world!" << std::endl;
а можно
C++
1
 cout << "Hello, world!" <<endl;
std пространство имен...
где про это можно почитать не нашел..
и почему оба варианта работают?
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2010, 19:01
Ответы с готовыми решениями:

про std
Доброго времени суток. Написал достаточно большую программу и тут понадобилось...

Вопрос по std::list
Не произойдёт ли здесь какая-нибудь ошибка после удаления элемента из списка? ...

Теоретический вопрос по std::map
Всем привет. Подскажите пожалуйста как std::map резервирует память и как в...

Про позднюю инициализацию std::thread
Я занимаюсь проигрыванием MIDI-файлов. В общем: есть мультимедиа-таймер,...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил...

21
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
07.03.2010, 19:07 2
Лучший ответ Сообщение было отмечено как решение

Решение

Krist_ALL, скорее всего у вас или Borland Builder 6 или MS Visual C++ 6.0.
Раньше пространств имен не было, поэтому для того чтобы использовать потоки cin/cout необходимо было только подключить библиотеку iostream.h.
Но потом сделали пространства имен и во всех современных средах они поддерживаются, поэтому для использования содержимого пространства необходимо его подключить или обращаться к ним по имени пространства.
Поэтому первый вариант будет работать только в новых IDE, второй или в старых, или в новых, при условии. что будет использован один из этих кодов сразу после после подкючения библиотек
C++
1
using namespace std;
или
C++
1
using std::cout;
3
Krist_ALL
9 / 9 / 2
Регистрация: 01.02.2010
Сообщений: 317
07.03.2010, 19:13  [ТС] 3
дайте плз ссыль где прочитать про std
и зачем оно нужно чтоб написано было)
1
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
07.03.2010, 19:15 4
Krist_ALL, http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library
1
al072
15 / 15 / 4
Регистрация: 03.02.2010
Сообщений: 133
07.03.2010, 19:16 5
Цитата Сообщение от Krist_ALL Посмотреть сообщение
C++
1
 std::cout << "Hello, world!" << std::endl;
а можно
C++
1
 cout << "Hello, world!" <<endl;
std пространство имен...
где про это можно почитать не нашел..
и почему оба варианта работают?
Почитать это можно практически в любой книге по С++.

Первый вариант кода будет работать в любом случае, так как std::cout это полный путь к стандартной функции библиотеки std. функция cout отвечает за вывод информации в консоль.

Второй вариант кода- будет работать и его можно будет использовать если в начале программы вместе с заголовочным файлом #include<iostream>, написать еще и использование контекста using std::cout- после обьявления этой строчки функцию cout, компилятор будет распознавать как будто было введено std::cout. проще всего включить в заголовок полное пространство имен std. следующим образом: using namespace std;
1
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
07.03.2010, 19:22 6
Цитата Сообщение от al072 Посмотреть сообщение
Первый вариант кода будет работать в любом случае, так как std::cout это полный путь к стандартной функции библиотеки std
al072, вы не заставите BC3.1 воспринять строку
C++
1
std::cout << "Hello, world!" << std::endl;
Прочитайте мой пост
1
al072
15 / 15 / 4
Регистрация: 03.02.2010
Сообщений: 133
07.03.2010, 19:57 7
Цитата Сообщение от M128K145 Посмотреть сообщение
al072, вы не заставите BC3.1 воспринять строку
C++
1
std::cout << "Hello, world!" << std::endl;
Прочитайте мой пост
Что такое ВСЗ?
без включения в заголовок пространства имен std, cout мы спокойно можем использовать с разрешением контекста! то есть std::cout.
1
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
07.03.2010, 20:08 8
BC3.1 - Borland C++ 3.1 1992 года выпуска.
Вопрос про std::

al072, Вы считаете разумным продолжать эту дискуссию?
1
al072
15 / 15 / 4
Регистрация: 03.02.2010
Сообщений: 133
07.03.2010, 20:13 9
Цитата Сообщение от M128K145 Посмотреть сообщение
BC3.1 - Borland C++ 3.1 1992 года выпуска.
Вложение 23496
al072, Вы считаете разумным продолжать эту дискуссию?
M128K145, я извиняюсь!!! просто мы говорим о разных средах.. я имею ввиду VC++(VS2008).

В таком случае дальнейшие обсуждения не имеют смысла..
1
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
07.03.2010, 20:16 10
al072, а ведь стоило всего лишь внимательно прочитать

Цитата Сообщение от M128K145 Посмотреть сообщение
Раньше пространств имен не было, поэтому для того чтобы использовать потоки cin/cout необходимо было только подключить библиотеку iostream.h.
Но потом сделали пространства имен и во всех современных средах они поддерживаются, поэтому для использования содержимого пространства необходимо его подключить или обращаться к ним по имени пространства.
Поэтому первый вариант будет работать только в новых IDE, второй или в старых, или в новых, при условии, что будет использован один из этих кодов сразу после после подкючения библиотек
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 13:27 11
раз темка открыта и свой вопрос задам.
вот на форуме вижу что обзывают ламерством вот это
Цитата Сообщение от Krist_ALL Посмотреть сообщение
cout << "Hello, world!" <<endl;
и гвоорят что надо так
Цитата Сообщение от Krist_ALL Посмотреть сообщение
std::cout << "Hello, world!" << std::endl;
вопрос:почему?
ведь легко вначале написать строк и никогда не писать лишнее,раз уж это только стиль программирования, то притензий никакой не должно быть.
1
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 13:44 12
На самом деле пиши как тебе удобно, просто используют std::cout что бы не засорять глобальную область имен используя директиву using;
Но на мой взгляд если у тебя идет например 10 строк cout то постоянно писать std::cout не очень то и удобно, я в таких случаях просто использую оператор using иногда даже локально:

C++
1
2
3
4
5
6
void someFunc()
{
    using std::cout // cout видно только в текущей функции.
    cout<<"blabla";
    cout<<"blablabla";
}
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 15:10 13
Цитата Сообщение от Amarted Посмотреть сообщение
иногда даже локально:
вот это не понял
Цитата Сообщение от Amarted Посмотреть сообщение
Но на мой взгляд если у тебя идет например 10 строк cout то постоянно писать std::cout не очень то и удобно
вот вот...т.к. у меня всегда так я юзаю этот оператор

Цитата Сообщение от Amarted Посмотреть сообщение
что бы не засорять глобальную область имен
а по конкретнее
1
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 15:33 14
когда ти используешь директиву using namespace std;
все имена кторые есть в этом пространстве(std) становятся видимыми, и если у тебя в программе встретиться такоеже имя которое определено в пространстве имен std то это вызовет конфликт имен;
использовать локально, это я имелл в виду
C++
1
2
3
4
5
6
7
8
9
void someFunc()
{
        using std::cout // cout видно только в текущей функции.
        cout<<"blabla";
        cout<<"blablabla";
}
// А здесь за пределами функции, то есть вне блока { } 
// cout<<"blabla" не сработает нужно или писать 
// std::cout<<"blabla" или опять использовать using.
1
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
08.03.2010, 15:56 15
МедведЪ, смысл примерно тот же, что и в ООП:
Незачем наследоваться от класса, если нужен только один метод, проще создать объект этого класса и через него обращаться к методу. Иначе тянется куча всякого ненужного мусора, которая может только навредить
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 18:41 16
Цитата Сообщение от M128K145 Посмотреть сообщение
Иначе тянется куча всякого ненужного мусора, которая может только навредить
а что за мусор?...

Добавлено через 1 минуту
хотя если код большой,в этот момент будет труднее,правильно думаю,M128K145?
1
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 20:42 17
Мусор это то что ты включаешь с помощью директивы using, но совсем не используешь в программе.
То есть помимо cout и cin в пространстве имён std, есть еще много чего не нужного в данном коде.
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
08.03.2010, 20:43 18
Amarted, аа все понятно..тогда правильно мыслю....думаю в это в больших программах так надо...
1
Amarted
158 / 20 / 3
Регистрация: 26.02.2010
Сообщений: 56
08.03.2010, 20:59 19
Ну считается как правило хорошего тона использовать такой способ везде где это возможно;
Но всё равно, если даже тебе не удобно писать каждый раз std::cout допустим, то рпедпочтительнее использовать using std::cout; чем using namespace std;
1
keep_clear
0 / 0 / 0
Регистрация: 16.09.2015
Сообщений: 16
22.05.2017, 16:45 20
Терзает вопрос.
Слишком частое разрешением контекста, например, std::cout, будет ли снижать производительность, чем в случае единоразового использования using std::cout, ну или на худой конец using namespace std и далее по тексту только cout?
Ведь налицо же обильные обращения к пространтсву имен не должно остаться незаметным для производительности.
0
22.05.2017, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2017, 16:45

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2...

STL std::set, std::pair, std::make_pair
Я не знаю как описать тему в двух словах, поэтому не обращайте внимание на...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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