Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование using namespace std; и не только, вопросы начинающего программиста 
:(
    Опции темы
chelser
Дата 10.10.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



всем здрасте.

предыстория

Решил самостоятельно С НУЛЯ изучить с++ по самоучителю "С++ без страха" Б. Оверленд 2005г.

Код пишу в "Borland C++ v 4.5" 

Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.



это была предыстория вопроса ;)



вот код программы


Код

#include <iostream.h>
//using namespace std;



int main() {
  cout << "tra-lya-lya!" << endl;
  cout << "tra-lya-lya!" << endl;
return 0;
}



вопрос 1.

using namespace std

в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую. 

у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: "Declaration syntax error".

если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?

в чем проблемма?



вопрос 2.

код тот же. У меня написано "iostream.h". А в книге говорят что надо писать без "*.h ", а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream

в чем проблемма?



вопрос 3.

Еще проблемма с выводом русских букв на экран. Типа "cout << "tra-lya-lya!"". Русские ПРОПИСНЫЕ буквы отображает нормально, а строчные отображает, но не все, те которые не отбражает оставляет вместо них пробел. Еще в самом "Borland C++ v 4.5" русский текст печатается кракозябрами.

как это можно исправить?



з.ы.

извиняюсь за длинный текст. ответы по возможности излагать на языке приближенном к "русскому" с терминологией еще проблеммы.

спасибо за понимание. заранее благодарен. smile

PM MAIL   Вверх
Daevaorn
Дата 10.10.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(chelser @  10.10.2007,  13:59 Найти цитируемый пост)
у меня в коде эта строка закомментирована потому что с ней не проходит компиляция. Пишет ошибка: "Declaration syntax error".

если закомментировать, то все работет нормально. при этом я же не прописываю вывод на экран std::cout хотя по книжке я именно так должен был сделать т.к. не прописал using?

в чем проблемма?

придется критиковать компилятор, т.к. он не соотвествует стандарту, на который опирается твоя книга.
Цитата(chelser @  10.10.2007,  13:59 Найти цитируемый пост)
Код пишу в "Borland C++ v 4.5" 

Microsoft Visual C++ или Borland C++ Builder планирую начать использовать позже, когда появятся навык написания кода в простой среде разработки. чтоб ошибки программирования не путались с ошибками использования среды разработки. )) за это прошу не критиковать.

не правильная позиция. ошибки использования среды не зависят от её новизны, а вот качетво компилятора зависит. сказчай VS 2005 express.
Цитата(chelser @  10.10.2007,  13:59 Найти цитируемый пост)
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую. 

плохие книги. лучше такую конструкцию не использовать. всегда явно указывать пространство имен - хороший стиль.
Цитата(chelser @  10.10.2007,  13:59 Найти цитируемый пост)
код тот же. У меня написано "iostream.h". А в книге говорят что надо писать без "*.h ", а без такого окончания опять не проходит компиляция. пишет что не может открыть файл iostream

в чем проблемма?

компилятор


Цитата(chelser @  10.10.2007,  13:59 Найти цитируемый пост)
Еще проблемма с выводом русских букв на экран. Типа "cout << "tra-lya-lya!"". Русские ПРОПИСНЫЕ буквы отображает нормально, а строчные отображает, но не все, те которые не отбражает оставляет вместо них пробел. Еще в самом "Borland C++ v 4.5" русский текст печатается кракозябрами.

как это можно исправить?

взять другой компилятор


PM MAIL WWW   Вверх
mrbrooks
Дата 10.10.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Комрад а если писать так:
Код

#include <iostream>
using namespace std;



int main() {
cout << "tra-lya-lya!" << endl;
cout << "tra-lya-lya!" << endl;
return 0;
}


а что бы русский шрифт в консоли работал номано юзай chelser функцию CharToOem  smile 

Это сообщение отредактировал(а) mrbrooks - 10.10.2007, 13:43
PM MAIL   Вверх
akizelokro
Дата 10.10.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

Код пишу в "Borland C++ v 4.5" 

Borland C++ был выпущен в 1994 году. STL была включена в стандарт С++ весной 1994 года.  Трудно требовать от компилятора полной поддержки стандарта, если компилятор писался во время или сразу после "по горячим следам" изменений стандарта. Но если ты собираешься изучать стандарт, то как начинающий начинающему посоветую поменять компилятор на более свежий.
(Кстати, не в самых новых учебниках прописывались такие ситуации (<iostream.h>).




--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Daevaorn
Дата 10.10.2007, 15:24 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(akizelokro @  10.10.2007,  16:18 Найти цитируемый пост)
STL была включена в стандарт С++ весной 1994 года.

официальный стандарт С++ появился в 1998 году.
PM MAIL WWW   Вверх
mrbrooks
Дата 10.10.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



А ну тогда все что я написал к коту под лохматый хвост   smile 
PM MAIL   Вверх
Alek86
Дата 10.10.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Daevaorn, ты и сам ВСЕГДА пишешь std:: перед стандартными функциями?

тут же речь о мелких прогах идет, тут еще можно.
главное, не зацикливаться, ибо в больших проектах, согласен, std:: писать надо.


--------------------
user posted image    user posted image
PM MAIL   Вверх
Daevaorn
Дата 10.10.2007, 18:48 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Alek86 @  10.10.2007,  19:44 Найти цитируемый пост)
ты и сам ВСЕГДА пишешь std:: перед стандартными функциями?

да
Цитата(Alek86 @  10.10.2007,  19:44 Найти цитируемый пост)
тут же речь о мелких прогах идет, тут еще можно.

привычку надо отрабатывать всегда.
PM MAIL WWW   Вверх
SergeCpp
Дата 10.10.2007, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Удивительно (и очень часто встречаю) — неужели является секретом имя автора C++?

Почему изучение начинается с книг весьма и весьма экстравагантных?..

Почему бы не приобрести оригинал?..

Слухи о трудности книги Страуструпа (если они повлияли на выбор) — весьма преувеличены smile

Кстати, вот работа Страуструпа Learning Standard C++ as a New Language

PM MAIL WWW ICQ   Вверх
Greeen
Дата 10.10.2007, 19:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 7
Всего: 18



SergeCpp, поддерживаю. Иногда диву даешься сколько всякий "С++ без проблем", "С++ бархатный путь" и еще всяких извращений на полках книжных магазинов. А реально стоящих книг раз-два и все.


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
chelser
Дата 10.10.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



Цитата

SergeCpp, поддерживаю. Иногда диву даешься сколько всякий "С++ без проблем", "С++ бархатный путь" и еще всяких извращений на полках книжных магазинов. А реально стоящих книг раз-два и все. 

Не совсем с вами согласен. Книги на которые вы ссылаетесь не спрю лучше, но информация в них преподносится так будто ее читающий минимум чемпион мира по программированию. Чайнику в данном вопросе очень трудно понять изложенную информацию. Выбор данной книги обусловлен исключительно вышеизложенным. Конечно после того как войду в курс дела воспользуюсь более серьезной литературой.

Добавлено через 3 минуты и 21 секунду
т.е. насколько я понял, то все мои вопросы сходятся к тому что я использую устаревший компилятор?

Добавлено через 6 минут и 45 секунд
Цитата

то как начинающий начинающему посоветую поменять компилятор на более свежий.

плз подскажите где можно скачать новый компилятор
и как заменить его
PM MAIL   Вверх
SergeCpp
Дата 10.10.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Цитата(chelser @  11.10.2007,  00:41 Найти цитируемый пост)
Чайнику в данном вопросе очень трудно понять изложенную информацию

Я был чайником в данном вопросе (C++)

Взял и прочитал дома, тихо, спокойно, 1-е издание (самое старое) — полностью всё

Потом купил 2-е издание (в двух томах), таким же образом прочёл его — полностью всё

Сложностей при чтении особых не встретил

Интернетов с форумами не было да и незачем это (думать самому нужно)

PM MAIL WWW ICQ   Вверх
Daevaorn
Дата 10.10.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(chelser @  10.10.2007,  23:41 Найти цитируемый пост)
т.е. насколько я понял, то все мои вопросы сходятся к тому что я использую устаревший компилятор?

абсолютно точно
Цитата(chelser @  10.10.2007,  23:41 Найти цитируемый пост)
плз подскажите где можно скачать новый компилятор

Если канал широкий
http://msdn2.microsoft.com/en-us/evalcenter/bb655864.aspx
если нет, то
http://msdn2.microsoft.com/ru-ru/express/aa975050.aspx
хорошие, современные компиляторы с одними из лучших в индустрии IDE
Цитата(chelser @  10.10.2007,  23:41 Найти цитируемый пост)
и как заменить его 

просто установи. и не забудь удалить старый, от греха подальшеsmile
PM MAIL WWW   Вверх
chelser
Дата 10.10.2007, 23:47 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.10.2007

Репутация: нет
Всего: нет



SergeCpp
извините что задел ваше драгоценное самолюбие
PM MAIL   Вверх
archimed7592
Дата 12.10.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  10.10.2007,  18:44 Найти цитируемый пост)
ты и сам ВСЕГДА пишешь std:: перед стандартными функциями?

Я вот всегда пишу - у меня это уже рефлекс... Даже в форумах, 2-3 строчные примеры пишу с std.

Цитата(SergeCpp @  10.10.2007,  19:16 Найти цитируемый пост)
Слухи о трудности книги Страуструпа (если они повлияли на выбор) — весьма преувеличены smile

Я, имея огромный опыт работы на С++, испытывал огромные трудности при попытке объяснить другу некоторые примитивные понятия по Страуструпу. Сначала я читал и полчаса втыкал что же там написано, потом, ещё дольше пытался объяснить другу, что там написана чушь и только потом, за 10 минут объяснял ему что к чему. Естественно, чушью являлся не изложеный в Страустпупе материал, а пришедшее к другу понимание вопроса после прочтение страниц из Страуструпа, а это очень хорошо говорит о "таланте" Страуструпа писать книги.
OTOH, "D&E" - очень хорошая книга и, надо сказать, читать её было интересно, но даже такой интересный материал Страус умудрился изложить так, что порой приходилось пролистывать страницы(ибо скукотища).
ИМХО, если Страуса и нужно читать(я про "The C++ PL"), то, только после получения очень хороших навыков "мышления на С++", с той целью, чтобы уточнить нужные тонкости языка и то, только в том случае, если не хватает технического английского, чтобы читать Стандарт.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
akizelokro
Дата 12.10.2007, 08:37 (ссылка)   | (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

2-3 строчные примеры пишу с std.

Прости дилетанта, но это не аргумент. Когда я читаю некоторые руководства, они рекомендуют конкретно прописывать std:: как раз при использовании в нескольких строчках кода (без указания using namespace std).
Еще прошу прощения. Вот я изучаю С++, бегиннер типа. Вы говорите, что std:: нужно прописывать всегда, потому что хороший стиль. У до чертиков авторов оно парабезразлично. Какие еще есть аргументы, кроме как авторы, не выучившие язык (названия обобщенных алгоритмов stl) и путающиеся в областях видимости и перегрузке, могут допустить "неотслеживамые" (для них) ошибки? Ведь мне, дилетанту, по сути дела все едино, писать ли using или нет, а лишние пять символов мне в ломы печатать сто раз на дню?
Простите, если что ляпнул не так. В целях ознакомления.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
archimed7592
Дата 12.10.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(akizelokro @  12.10.2007,  08:37 Найти цитируемый пост)
некоторые руководства

Некоторые руководства, думаю, расчитанные не на новичка, которые редко знают о возможности ограничить scope или не догадываются, что если и советуют писать using blablabla, то ни в коем случае не в заголовочном файле и т.д.


Цитата(akizelokro @  12.10.2007,  08:37 Найти цитируемый пост)
потому что хороший стиль

Хороший стиль всегда имеет объяснение почему именно он хороший, а другой плохой.
Здесь есть некоторая дискуссия на эту тему.
Вообще, по возможности нужно использовать полностью квалифицированные имена, а если это выглядит жутко, то локализовывать кусочек кода где очень часто используется определённое NS и именно там писать using namespace NS;


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Dronchik
Дата 12.10.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 0
Всего: 37



chelser, чтобы заюзать русские буквы есть 2 варианта
первый: заюзать функцию CharToOem
Код

#include <windows.h>

//........................................

char qwerty[10];
CharToOem("Привет\n", qwerty);
cout<<qwerty;

или выставить локаль
Код

setlocale(LC_ALL, "Russian"); 


Добавлено через 3 минуты и 3 секунды
Локаль жрёт меньше ресурсов


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
zkv
Дата 12.10.2007, 14:22 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(akizelokro @  12.10.2007,  08:37 Найти цитируемый пост)
Когда я читаю некоторые руководства, они рекомендуют конкретно прописывать std:: 

прям так и говорят: "Не пишите std::cout - это плохо, пишите using namespace std; а потом просто cout - это хорошо"? 
Не верится что-то...
Цитата(akizelokro @  12.10.2007,  08:37 Найти цитируемый пост)
У до чертиков авторов оно парабезразлично.

одно дело код примера - другое рабочий. Они и ошибки зачастую не проверяют все подряд. Тем более новичку будет проще воспринимать код без пространств имен.
Цитата(akizelokro @  12.10.2007,  08:37 Найти цитируемый пост)
Какие еще есть аргументы

код легче читается. И вообще, если нэймспэйс не нужен, то может тогда устранить из классов все модификаторы доступа кроме public, че там парится, закрытый член, не закрытый, сделаем все открытыми, а там разберемся  smile 
PM MAIL   Вверх
akizelokro
Дата 19.10.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

прям так и говорят: "Не пишите std::cout - это плохо, пишите using namespace std; а потом просто cout - это хорошо"? 

Аргумент небезупречен. Что-то я не встречал "Не пишите никогда using namespace std; а потом просто cout - это плохо, пишите только std::cout - это хорошо".

Цитата

по возможности нужно использовать полностью квалифицированные имена

это аргумент. Но у меня, новичка, не возникло бы никаких вопросов, если бы в начала цитаты не было бы слов "по возможности".

Цитата

Здесь есть некоторая дискуссия на эту тему.

Прочитал. Более-менее серьезные аргументы в том, что не "засоряется" (кавычки мои) глобальное пространство имен и ускоряется компиляция.  Про время компиляции, - поверю. По слову "засоряется", я все-таки поверю штатским тестовым сайтам, как они будут оформлять задачи по стандартной библиотке, которую эксперт должен знать наизусть.
У меня вывод - откровенно четкого определения и безупречных аргументов нет.  При устройстве на работу буду следовать сложившимся правилам в компании.

Давайте, предупреждение у меня уже есть. Модерируйте.


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
archimed7592
Дата 19.10.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(akizelokro @  19.10.2007,  15:25 Найти цитируемый пост)
По слову "засоряется", я все-таки поверю штатским тестовым сайтам, как они будут оформлять задачи по стандартной библиотке, которую эксперт должен знать наизусть.

В задачках как правило используется не самый лучший стиль. Цель задачи описать проблему наиболее кратко и получить ответ на вопрос "умеет ли соискатель решать такого рода проблемы?".

Засоряется оно очень даже хорошо. Не раз сталкивался.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mal Hack
Дата 10.7.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 2
Всего: 261



Я проше прощения за поднятие старой темы, но вопрос по сабжу.
Есть ли разница в оптимальности (расход памяти, быстродействие) при обращении std::string или к своим нэймспейсам или без префикса имени пространства имен?
Дело в том, что для решаемой в данный момент задаче этот вопрос очень актуален, ввиду того, что программа выполняет определенные функции раз в 10 ms, и таких функций может быть несколько.

Спасибо.
PM ICQ   Вверх
Lazin
Дата 10.7.2008, 15:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



разницы нет, пространства имен существуют только для удобства...
PM MAIL Skype GTalk   Вверх
Rififi
Дата 10.7.2008, 19:50 (ссылка) |   (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Цитата(chelser @  10.10.2007,  12:59 Найти цитируемый пост)
в книгах настоятельно рекомендуют вставлять в программу эту строку. Пишут что using позволяет обращаться к обьектам например std::cout напрямую. 

книги, в которых имеются такие рекомендации написаны либо для ламеров, либо ламерами. не исключён также и третий вариант, являющийся логическим объединением предыдущих двух... 
PM MAIL   Вверх
Mal Hack
Дата 10.7.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 2
Всего: 261



Rififi, простите, Герберт Шилдт - ламер?
PM ICQ   Вверх
Ulysses4j
Дата 10.7.2008, 22:20 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Цитата(Mal Hack @  10.7.2008,  20:45 Найти цитируемый пост)
Rififi, простите, Герберт Шилдт - ламер?

Простите, позволю себе также ответить на поставленный вопрос: Герберт Шилдт — ламер. Последний перл: этот человек во вступлении к книжке по последней Java (6-ой, значится) все еще рассуждает на тему, является ли Java япом для интернета. Откопал экскременты мамонта, называется.

По сабжу: разницы нет. Все обращения, которые разнятся наличием квалификации пространства имен, связываются с объектами этих пространств имен на этапе компиляции. Упрощенно ситуацию можно представить так: на месте обращения к cout (квалифицированного или нет) компилятор вписывает адрес объекта. Пространства имен позволяют помочь компилятору понять, какой именно адрес написать (если имен cout несколько в разных пространствах имен). Как именно cout приписано к пространству имен (using или std::cout) компилятору неважно, лишь бы конфликтов не было. Он впишет нужный адрес и точка.

По сабжу выше: писать директивы включения пространст имен (using namespace ...) это nasty. Плохо, типа. В стендовых примерах можно. Ну, в тестовых рутинах, если очень уж неймется, с натяжкой. Но в продакш коде («библиотечном коде») никогда.

Это сообщение отредактировал(а) Ulysses4j - 11.7.2008, 05:29


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
JackYF
Дата 10.7.2008, 22:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Mal Hack, я дваждую то, что пространства имён важны только на этапе компиляции. Сгенериванный объектный код ничем не будет отличаться.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Henpyxa
Дата 9.10.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.10.2010

Репутация: нет
Всего: нет



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

и так и не дали вразумительного ответа, хорошо или плохо писать в начале кода using namespace блаблабла;
мне, как ламеру, это представляется разумным, исходя из примера. берешь ты книгу со стеллажа (например cout), отходишь от стеллажа, читаешь, нужна еще одна книга (тот же std::cout) - опять идешь к стеллажу, тратишь ресурс на обращения к стеллажу (иллюстрирована конструкция std::cout), вместо того, чтобы стоять около стеллажа и доставать нужные тебе книги (не расходуя лишних ресурсов).
или все устроено совсем не так? только громко не смейтесь smile
PM MAIL ICQ   Вверх
mes
Дата 9.10.2010, 14:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Henpyxa,  если приблизить к Вашему стилюм, то вот так себя чувствует компилятор:

берет cout , думает кто ж это такой, благо находит подходящий только в std:: и успокаивается, значит это он.
берет cin, думает кто ж такой? находит один в std:: и один в anynamespace:: и озадачивает себя и программиста вопросом, а кой же использовать ?!
берет std::cin и без всяких раздумий использует его smile
 smile 


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 9.10.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Henpyxa @  9.10.2010,  13:27 Найти цитируемый пост)
страуструп и впрямь книги писать не умеет, я новичок, пытался его читать, пока искал оптимальную настольную книгу. главе на 11 мозг дал сбой, и я без зазрений совести отказался от этого варианта.

А ты Саттера попробуй smile 
На самом деле Страуструп не для новичков пишет, осилить его книгу не так уж и просто, начни с чего нибудь попроще.

Цитата(Henpyxa @  9.10.2010,  13:27 Найти цитируемый пост)
и так и не дали вразумительного ответа, хорошо или плохо писать в начале кода using namespace блаблабла;

Его нет, это вопрос предпочтений. Что точно можно сказать так это то, что в заголовочных файлах using писать НЕ хорошо, а в cpp пиши если хочешь. Как будет удобно.

PM   Вверх
boostcoder
Дата 9.10.2010, 14:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



особенно весело бывает когда раскрываешь несколько namespace`ов, к примеру std, boost, boost::asio, boost::asio::ip::tcp. вот тогда-то и начинается все веселье smile 

Это сообщение отредактировал(а) boostcoder - 9.10.2010, 14:17
PM WWW   Вверх
Master01
Дата 9.10.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007

Репутация: 2
Всего: 2




я всегда пишу в заголовке using std::something.

или если тип внутри класса юзается определяю новое имя через typedef

typedef std::Something _tSomething;

и дальше в коде использую Something.


Мне кажется в коде каждый раз писать namespace name тоже не очень кашерно. Для std::cout ещё ничего смотрится, но если там вложенные namespace-ы? например boost::unit_test::something - мне что каждый раз тятнуть за собой эту тягомотину?

но одно верно "using namespace std" - это зло.
PM MAIL   Вверх
azesmcar
Дата 9.10.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Master01 @  9.10.2010,  14:17 Найти цитируемый пост)
но одно верно "using namespace std" - это зло. 

и почему же?

Это сообщение отредактировал(а) azesmcar - 9.10.2010, 14:20
PM   Вверх
boostcoder
Дата 9.10.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Master01 @  9.10.2010,  14:17 Найти цитируемый пост)
boost::unit_test::something - мне что каждый раз тятнуть за собой эту тягомотину?

нет.
так:
Код

namespace but = boost::unit_test;
...
but::something

PM WWW   Вверх
mes
Дата 9.10.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(azesmcar @  9.10.2010,  13:15 Найти цитируемый пост)
 что в заголовочных файлах using писать НЕ хорошо, а в cpp пиши если хочешь. Как будет удобно.

дело даже не в заголовочных файлах а в области видимости.. 
в общем надо делать так чтоб "других"  твои раскрытия видимости не коснулись..
"других" это не людей, а фрагментов кодов имеющих свою логику.. они могут быть как в одном файле , так и в разных.. 



--------------------
PM MAIL WWW   Вверх
Master01
Дата 9.10.2010, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007

Репутация: 2
Всего: 2



Цитата(azesmcar @ 9.10.2010,  14:18)
Цитата(Master01 @  9.10.2010,  14:17 Найти цитируемый пост)
но одно верно "using namespace std" - это зло. 

и почему же?


azesmcar, наверно, я всё же слишком безапеляционно высказался насчёт "using namespace std."

Мне почему-то кажется, что вы готовы из рукава вытащить тройку-другую контраргументов для меня smile которые, в свою очередь, также можно контраргументировать ... 

Правельнее было бы сказать, что  Я предпочитаю такой подход не использовать, однако, не настаиваю, что моё мнение единственно правельное.

Однако, по вашему вопросу - я так не пишу из 2х соображений:
1. Не очень будет приятно если что-то из std или из другого "густонаселённого" namespace-а начнёт конфликтовать с чем-то таким же загадочным из другого namespace-а.

2. Так более понятно какой именно функционал из какого namespace-а используется в данном модуле.

Добавлено через 11 минут и 46 секунд
Цитата(boostcoder @ 9.10.2010,  14:19)
Цитата(Master01 @  9.10.2010,  14:17 Найти цитируемый пост)
boost::unit_test::something - мне что каждый раз тятнуть за собой эту тягомотину?

нет.
так:
Код

namespace but = boost::unit_test;
...
but::something



boostcoder, спасибо. Интересный вариант.

Единственное, что меня смущает это не запутается ли, читающий код человек, в таком лабиринте namespace-ов? 
Просто, все знают что такое boost::unit_test, а вот but придётся поискать определние. Если предположить что таких "петель" много, то можно основательно запутаться, наверно .... хотя, так во всём, если подходить к проблеме бездумно.
PM MAIL   Вверх
Henpyxa
Дата 9.10.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.10.2010

Репутация: нет
Всего: нет



Цитата

все знают что такое boost::unit_test


я не знаю что это такое smile к слову сказать, а где можно посмотреть-поизучать внутренности нэймспэйсов?

а насчет книги.. заметил где-то на форуме сообщение про http://worldcpp.vingrad.ru/, почитал, понравилось smile хотя материала и много, но все же маловато для полного понимания азов. хотя бы про классы в С++: пытался написать простенькую программку, используя знания, полученные от чтения фака, что-то типа

Код

class Prototipe 
{
public:
    double Calculate(double iResult)
    {
        double iRes;
        iRes = iPrice + (iCode*(iPrice-(iPrice*0.18)))/100;
        return iRes;
    };
    char sName[200];
    int iCode;
    double iPrice;
};

int main() 
{
    Prototipe payment;
    char sRealName[20];
    int iCooCode;
    double iBuyPrice, iSellPrice;
    cout << "thing is: ";
    cin >> sRealName;
    strcpy_s(payment.sName, sRealName);
    cout << "prise is: ";
    cin >> iBuyPrice;
    cout << "ratio is: ";
    cin >> iCooCode;
    payment.iCode = iCooCode;
    payment.iPrice = iBuyPrice;
    payment.Calculate(iSellPrice);
    _getch();
}


и не вкурю никак про ошибку Run-Time Check Failure #3 - The variable 'iSellPrice' is being used without being defined. недостаточно там написано про классы smile и в шапке все-таки использовал using namespace std;
имхо, удобней указать один раз в маленьком коде, чем каждый раз втыкать перед cout'ами и cin'ами. про длинные коды даже страшно думать..
PM MAIL ICQ   Вверх
Crafty
Дата 9.10.2010, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



Эта переменная не инициализирована
Код

  double iSellPrice;


Добавлено через 4 минуты и 56 секунд
Цитата(Henpyxa @  9.10.2010,  17:56 Найти цитируемый пост)
удобней указать один раз в маленьком коде, чем каждый раз втыкать перед cout'ами и cin'ами. про длинные коды даже страшно думать..

Можно использовать 
Код

using std::cout;  
using std::cin;



Это сообщение отредактировал(а) Crafty - 9.10.2010, 17:35
PM MAIL   Вверх
boostcoder
Дата 9.10.2010, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(Master01 @  9.10.2010,  16:25 Найти цитируемый пост)
Просто, все знают что такое boost::unit_test, а вот but придётся поискать определние.

конечно, это имя я взял с фонаря. придумайте более понятное. например boost_unit_test. хоть и выглядит длиновато, но автодополнение редактора кода позволит писать его всего по нескольким введенным символам.
Цитата(Henpyxa @  9.10.2010,  16:56 Найти цитируемый пост)
заметил где-то на форуме сообщение про http://worldcpp.vingrad.ru/

тоже впервые вижу.
а как часто обновляется? если обновляется вообще...
PM WWW   Вверх
azesmcar
Дата 9.10.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Master01 @  9.10.2010,  16:25 Найти цитируемый пост)
Мне почему-то кажется, что вы готовы из рукава вытащить тройку-другую контраргументов для меня smile которые, в свою очередь, также можно контраргументировать ... 

Да нет, для этого аргументов не нужно. Аргументы нужны для обоснования того, что using namespace - зло smile 

Цитата(Master01 @  9.10.2010,  16:25 Найти цитируемый пост)
Правельнее было бы сказать, что  Я предпочитаю такой подход не использовать, однако, не настаиваю, что моё мнение единственно правельное.

С предпочтениями конечно же спорить не имеет смысла, я и писал, что это вопрос личных предпочтений. Я тоже предпочитаю использовать std::, если речь зашла об этом.
PM   Вверх
mes
Дата 10.10.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Henpyxa @  9.10.2010,  15:56 Найти цитируемый пост)
 удобней указать один раз в маленьком коде, 

в маленьком учебном или "для себя" коде можно вообще писать как угодно.. 
а вот если проект чуть побольше, то зачем создавать потенциальные проблемы,
если с cout и cin достаточно уникальны и проблем не будет, но вот тот же vector есть в куче разных библиотек..
и мало того что раскрытые имена могут создать неопределенность для компилятора, так и программисту с ходу не сразу будет понятно о чем речь.. 


Цитата(Henpyxa @  9.10.2010,  15:56 Найти цитируемый пост)
 чем каждый раз втыкать 

вспомните народную мудрость "подальше положишь - поближе возьмешь".


Цитата(Master01 @  9.10.2010,  15:25 Найти цитируемый пост)
вот but придётся поискать определние.

используемые синонимы неймспейсов легче запомнить, раз два и обчелся, чем уследить за всеми сущностями раскрытых пространств..

вобщем найдите хороший компромис, и код будет красивым и удобным smile



--------------------
PM MAIL WWW   Вверх
bsa
Дата 10.10.2010, 11:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(Henpyxa @  9.10.2010,  14:27 Найти цитируемый пост)
берешь ты книгу со стеллажа (например cout), отходишь от стеллажа, читаешь, нужна еще одна книга (тот же std::cout) - опять идешь к стеллажу, тратишь ресурс на обращения к стеллажу (иллюстрирована конструкция std::cout), вместо того, чтобы стоять около стеллажа и доставать нужные тебе книги (не расходуя лишних ресурсов).
или все устроено совсем не так? только громко не смейтесь  

На самом деле, в случае использования using namespace произойдет следующее: взяли пару стеллажей (количество пространств + глобальное + локальное) и вывалили все его содержимое в кучу, затем сказали компилятору, а нука найди мне cout в этой кучи.

Лично я считаю, что using namespace:
1. в глобальной области видимости в хидерах недопустимо. Сам сталкивался...
2. в глобальной области видимости .cpp файлах нежелательно.
3. внутри функций использовать можно, но лучше использовать переименование. Например, в документации к boost::program_options приводится такая вещь: namespace po = boost::program_options.
PM   Вверх
mes
Дата 10.10.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bsa @  10.10.2010,  10:28 Найти цитируемый пост)
 взяли пару стеллажей (количество пространств + глобальное + локальное) и вывалили все его содержимое в кучу, затем сказали компилятору, а нука найди мне cout в этой кучи.

 smile 

добавлю (хотя и было уже сказано) что если компилятору все равно в какой кучи искать, то программисту уследить за всеми связями в такой неразбирихи довольно сложно.. 


--------------------
PM MAIL WWW   Вверх
Henpyxa
Дата 11.10.2010, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 9.10.2010

Репутация: нет
Всего: нет



спасибы, понял
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1080 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.