Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.96/173: Рейтинг темы: голосов - 173, средняя оценка - 4.96
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
1

Зачем часто писать std::, если можно один раз using namespace std?

01.07.2010, 13:17. Просмотров 32167. Ответов 20
Метки нет (Все метки)

зачем часто писать std:: если можно один раз using namespace std?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2010, 13:17
Ответы с готовыми решениями:

Использовать using namespace std; или каждый раз прописывать std:: . ?
Как безопаснее и рациональнее поступать? Как в больших проектах поступают на этот счет?

Зачем указывать using namespace std
Здравствуйте. Вроде разобрался с циклами, ветвлением, базовыми типами данных. Остается не...

Что использовать, std::cout или просто using namespace std?
Приветствую! Сейчас учу С++, постигаю азы так сказать. В арсенале две книги - Джефф Кент, ...

Пространство имен - namespace std или std::
В каких случая лучше писать (std::cout) или просто прописать (namespace std) и почему ?

20
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
01.07.2010, 13:19 2
std - пространство имен. При using namespace std ты его включаешь, поэтому глобально его вызывать не очень хорошо, для легких программ - можно. А если тебе понадобятся другие пространства имен? Да и смысл включать пространство имен, ради двух функций cout,cin?
0
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
01.07.2010, 13:22  [ТС] 3
спасибо.
я же говорю, программист-любитель!...
0
3078 / 2399 / 255
Регистрация: 11.03.2009
Сообщений: 5,444
01.07.2010, 13:27 4
Можно вместо всего пространства имен подключать отдельные функции.
C++
1
2
3
using std::cout;
using std::cin;
// и т.д.
5
ниначмуроФ
846 / 530 / 110
Регистрация: 12.10.2009
Сообщений: 1,914
01.07.2010, 13:28 5
что бы не писать каждый раз
C++
1
std::cin   std::cout
можно в нчале 1 раз написать
C++
1
using std::cin;  using std::cout;

опоздал
1
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
01.07.2010, 13:55 6
а ещё в <iomanip> есть std::setw(); - это типа табуляции))
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10898 / 6814 / 1623
Регистрация: 25.07.2009
Сообщений: 12,519
01.07.2010, 17:15 7
Вот так тоже работает
C++
1
2
3
4
5
6
7
8
#include <iostream>
#define cout std::cout
#define endl std::endl
 
int main(){
    cout << "Hello world!" << endl;
    return 0;
}
но что-то подсказывает, что лучше так не делать
2
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
01.07.2010, 17:46 8
Цитата Сообщение от easybudda Посмотреть сообщение
Вот так тоже работает
C++
1
2
3
4
5
6
7
8
#include <iostream>
#define cout std::cout
#define endl std::endl
 
int main(){
    cout << "Hello world!" << endl;
    return 0;
}
но что-то подсказывает, что лучше так не делать
меня всегда устраивает using namespact std; пока с проблемами не сталкивается......
p.s.
А для чего используестся #define?(помимо данного случая с cout и endl)?
1
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
01.07.2010, 17:48 9
Цитата Сообщение от Sanu0074 Посмотреть сообщение
меня всегда устраивает using namespact std; пока с проблемами не сталкивается......
p.s.
А для чего используестся #define?(помимо данного случая с cout и endl)?
Макрос.ТТ. Гугли.

Допустим

#define PI 3.1415
float pi=PI;
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
01.07.2010, 17:53 10
Sanu0074, а к чему вы вообще написали про std::setw?
0
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
01.07.2010, 18:15 11
Цитата Сообщение от neske Посмотреть сообщение
Sanu0074, а к чему вы вообще написали про std::setw?
т.к. вопрос был про std::, а не конкретно про cout\endl!!!
0
Эксперт С++
2332 / 1705 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
01.07.2010, 18:18 12
Цитата Сообщение от Sanu0074 Посмотреть сообщение
т.к. вопрос был про std::, а не конкретно про cout\endl!!!
Вопрос был про использование пространств имен, а не конкретно по std. Мог бы тогда еще и контейнеры, алгоритмы, утилиты и т.д. упомянуть.
0
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
01.07.2010, 18:24 13
Цитата Сообщение от Lavroff Посмотреть сообщение
Макрос.ТТ. Гугли.

Допустим

#define PI 3.1415
float pi=PI;
конечно спс)) но я ничо непонял)) обязательно погуглю......

Добавлено через 5 минут
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вопрос был про использование пространств имен, а не конкретно по std. Мог бы тогда еще и контейнеры, алгоритмы, утилиты и т.д. упомянуть.
внимательно читайте текст темы:
зачем часто писать std:: если можно один раз using namespace std?
0
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
01.07.2010, 18:25 14
Sanu0074, #define PI 3.1415 // PI=3,1415
pi=PI // Я думаю сами понимаете)
1
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 7
01.07.2010, 18:26 15
Sanu0074, как я понял, комманда #define выполняет простую текстовую подстановку. В таком случае, не вижу разницы между #define и typedef.
1
В астрале
Эксперт С++
8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
01.07.2010, 18:29 16
Цитата Сообщение от nekogdamne Посмотреть сообщение
Sanu0074, как я понял, комманда #define выполняет простую текстовую подстановку. В таком случае, не вижу разницы между #define и typedef.
# видите? Значит уже разница. #define подает комманду препроцессору, что PI есть 3,1415

Директива define позволяет связать идентификатор (мы будем называть этот идентификатор замещаемой частью) с лексемой (возможно, что пустой!) или последовательностью лексем (строка символов является лексемой, заключённой в двойные кавычки), которую называют строкой замещения или замещающей частью директивы define.

Например,

#define PI 3.14159
Идентификаторы, которые используют для представления констант, называют объявленными или символическими константами. Например, последовательность символов, располагаемая после объявленной константы PI, объявляет константу 3.14159. Препроцессор заменит в оставшейся части программы все отдельно стоящие вхождения идентификатора PI на лексему, которую транслятор будет воспринимать как плавающий литерал 3.14159.

Препроцессор выполняет грубую предварительную работу по замене замещаемых идентификаторов замещающими строками. В этот момент ещё ничего не известно об именах, поскольку транслятор фактически ещё не начинал своей работы. А потому следует следить за тем, чтобы замещаемые идентификаторы входили в состав объявлений лишь как элементы инициализаторов.

Рассмотрим несколько примеров. Директива препроцессора

#define PI 3.14159
Превращает корректное объявление

float PI;
в синтаксически некорректную конструкцию

float 3.14159;
А следующее определение правильное.

float pi = PI;
1
Эксперт С++
2332 / 1705 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
01.07.2010, 18:30 17
Цитата Сообщение от Sanu0074 Посмотреть сообщение
внимательно читайте текст темы:
зачем часто писать std:: если можно один раз using namespace std?
И где здесь просьба рассказать, что входит в std?
Цитата Сообщение от nekogdamne Посмотреть сообщение
как я понял, комманда #define выполняет простую текстовую подстановку.
Именно.
Цитата Сообщение от nekogdamne Посмотреть сообщение
В таком случае, не вижу разницы между #define и typedef.
Где вы видели, чтобы typedef осуществлял текстовую подстановку?
1
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 7
01.07.2010, 18:43 18
Lavroff, я имел в виду разницу по функциональности.
Но я уже понял, в чём различие. К примеру, выражение:
C++
1
#define unsigned short int usint
неверное. Вместо него надо использовать
C++
1
typedef unsigned short int usint;
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
01.07.2010, 18:44 19
Правильно поняли
1
2821 / 1630 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
01.07.2010, 19:33 20
Цитата Сообщение от nekogdamne Посмотреть сообщение
C++
1
#define unsigned short int usint
неверное.
Почему же неверное?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#define unsigned short int usint
void qq()
{
    unsigned;
}
unsigned()
{
    return 55;
}
int main()
{
    unsigned = 99;
}
:-)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2010, 19:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Std:: или using namespace std;
Вопрос к профессионалам. Меня давно интересуют такие вопросы: 1) Почему, многим, вроде бы не...

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

Как можно еще использовать std::placeholders вне в связки с std::bind?
Добрый день! Как можно еще использовать std::placeholders вне в связки с std::bind?

Std и using namespace std
Здравтсвуйте, я не из тех если кому то сказали так надо, а те и пишут что им дали.Поэтому я бы...

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

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


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

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

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