using namespace std и std:: надоело смотреть!
Запись от -=ЮрА=- размещена 06.04.2012 в 22:30
Показов 18900
Комментарии 159
Метки c++
|
Наболело поэтому несколько эмоционально: Кто нибудь понимает зачем используют using namespace std; и как глупо для каждой стандартной функции STD писать std:: - нееет???Ну тогда вам сюда в дискуссию! Итак зачем вообще используют конструкцию using namespace std - ответ прост этим мы явно указываем компилятору что хотим использовать в своём коде функции из пространства имён STD Тогда у многих встаёт вопрос: что означает конструкция std:: это явное указание области видимости? Ответ тоже прост : при такой записи компилятор также обращается к объекту(чаще всего это функция) следующего за вторым двоеточием. Итак что при использовании using namespace что при использовании std::мы всего лишь даём понять компилятору к какой функции и из какого пространства имён обращаться. А теперь у меня вопрос к вам, читающим всё это - Что это за инкубатор с std::, кто-то когда то по видимому безрукий ляпнул : "да будет std::, так правильно" и всё - понеслась. Каждый пытается обезопасить себя от какого-то потенциально опасного перекрытия пространства имён и т.д, хотя никакой опасности нет вообще. Всем скептиками предлагаю код ниже
Вывод напрашивается сам собой - накой вообще везде лепить std:: если даже без явного указания области видимости ничего страшного не произойдёт даже при использовании другого namespace-а Код с двоеточиями, нечитабелен, абсолютно такой же по функционалу что и код без std::. И ещё один момент - кто нибудь в MSDN-е встречал код с std:: именно официальный код???Ну хорошо из 100 кодов возможно пара содержит std::, остальная же часть кода дана с using namespace std; как такая которая позволяет сокращать код (прелагаю посчитать на сколько символов увеличивает std:: в каждой строчке длинну кода). Таким образом конструкция using namespace std целесообразней в плане сокращения длинны кода, нежели std::. Все гипотетичекие проблеммы перекрёстного использования пространств имён с одинаковыми функциями надуманы и обусловлены кривостью чьих-то рук, либо неправильным их расположением(я о руках) не из того места. Добавлено мной 31.07.2012 Тема оказалась душетрепещущей - предлагаю для ускорения понимания перепрыгивать с 1-й страницы сюда https://www.cyberforum.ru/blog... omment3371 и сюда https://www.cyberforum.ru/blog... omment3378 Также привожу выжимку из Шильдта
| ||||||
Метки c++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 159
Комментарии
-
ForEveR , такой к херам временный! Ёпт CFirst:: - это чё бля по твоему как не веменный экзепляр класса? Да это вызов виртуальной функции я бля страницы 2 испестрел об этом, начиная с этой фразы
в этом посте https://www.cyberforum.ru/blog... omment3307
Сами нихера не разбираетесь НО тем не менее бля мните себя невъебаться в телевизор гуру
Тут топик посвящён другому, в дальнейшем буду нафик удалять всё что идёт как личное или же не по теме, Я ЯСНО ВЫРАЗИЛСЯ???!Запись от -=ЮрА=- размещена 31.07.2012 в 11:40
-
CFirst:: - это не временный экземпляр класса (если вы имеете ввиду под экземпляром класса объект). вы вообще не понимаете, что городите. какой в баню виртуальной если вы в последнем посте сделали функцию статической? вы, исписали 2 страницы бреда. как вообще после этого можно говорить о том что разбираетесь в чем то? понты не жмут? еще в учителя лезете. пшш.Запись от vxg размещена 31.07.2012 в 12:01
-
Надоело с идиотами общаться!
Мне что бля самому писать AFXWIN оплётку я привёл наглядный пример (разработчики самолётов исследуют некоторые абстракции своих детишь в аэротрубе, конструкторы машин делают деревянные модели, может мне ещё Виндовс до обеда написать, чтобы было о чём говорить). Вы тут нихрена кроме 3,14да прости госпосди за выражение не пишите, хоть бы один из вас написал неприступный код в плане спейсов и чтобы я его не поправил. Так нет же вы сука знаете что я бля всё сделаю и потому вобще кроме палемики что либо боитесь представить. Я чё бля бюро бесплатных разработок???! Какую абстракцию привёл ту и жуйте радуйтесь что не на словах пишу и вообще ещё разговариваю. А теперь блин об этом
- а что это?Собака порылась или что?Мы к чему можем применять :: нука ты блин долбанный гуру, к чему блин???
К спейсам можем?Можем, к экземплярам класса можем?Можем!Так какого ты хрена меня заводишь?!![]:->](//cyberstatic.net/images/smilies/aq.gif)
Запись от -=ЮрА=- размещена 31.07.2012 в 12:15
-
ликбез для недогуру:
C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
class CWnd { virtual void SetWindowText(LPCTSTR lpszString); //вот виртуальная функция базового класса }; class CDialog: public CWnd { //мы ее унаследовали }; class my_form: public CDialog { //и здесь мы ее унаследовали //а в этом обработчике мы ее вызываем void CWndTextDlg::OnOK(void) { SetWindowText(_T"fuck"); //здесь не нужно указывать область действия CDialog:: или CWnd:: - это избыточно } //это наша статическая функция static void my_function(void) { //в ней мы никогда не вызовем другую функцию не являющуюся статической, такую как SetWindowText потому, что статические функции не получают указатель на объект this } }; //далее где-то в программе (НЕ В ОБРАБОТЧИКЕ ФОРМЫ!!!) my_form::my_function(); //вызов статической функции - по другому нельзя, указание области действия обязательно, my_form - это область действия, это не объект, объект будет далее (my_form_object) my_form_object->SetWindowText(_T"fuck"); //вызов функции не являющейся статической - по другому (my_form::SetWindowText) нельзя, вызов my_form_object->my_form::SetWindowText(_T"fuck") допустим, но в указании области действия в этом случае нет необходимости
Запись от vxg размещена 31.07.2012 в 12:15
-
Запись от vxg размещена 31.07.2012 в 12:19
-
Запись от vxg размещена 31.07.2012 в 12:21
-
Запись от -=ЮрА=- размещена 31.07.2012 в 12:22
-
Научись сначала писать чтобы хоть абстракции линковались
Сообщение от vxg
http://liveworkspace.org/code/... 202dc95fa3
(это если ты конечно абстрактный пример хотел привести)
А я сейчас проектик залью на файлообменник чтобы ты свё рыло заткнул навсегда, жди я быстро...Запись от -=ЮрА=- размещена 31.07.2012 в 12:27
-
Запись от -=ЮрА=- размещена 31.07.2012 в 12:29
-
Первое обосрись на счёт
Обосрись разC++ 1 2 3 4 5
//это наша статическая функция static void my_function(void) { //в ней мы никогда не вызовем другую функцию не являющуюся статической, такую как SetWindowText потому, что статические функции не получают указатель на объект this }
- нихрена это не статическая функцияC++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// wndTextDlg.h : header file // #if !defined(AFX_WNDTEXTDLG_H__CAAD6E23_1ECE_4908_818A_9291B68C224E__INCLUDED_) #define AFX_WNDTEXTDLG_H__CAAD6E23_1ECE_4908_818A_9291B68C224E__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 ///////////////////////////////////////////////////////////////////////////// // CWndTextDlg dialog class CWndTextDlg : public CDialog { // Construction public: void SetWindowText(LPCTSTR szTitle); CWndTextDlg(CWnd* pParent = NULL); // standard constructor
Обосрись 2
Думаешь я код так приводил, на пожуй умник!C++ 1 2 3 4 5 6
void CWndTextDlg::SetWindowText(LPCTSTR szTitle) { CString str = szTitle; str = "Virtual fun " + str; CDialog::SetWindowText(str); }
Вот тут по ссылке пару недель будет проект(скрин компиляции тоже приложил)
Файл № 31890895 подтвержден
Название: wndText_project_screen.rar
Размер: 79.28 кб
Доступен до: 2012-08-30 12:34:48
Ссылка для скачивания файла: http://rusfolder.com/31890895
надеюсь слинковать сможешь, хотя я уже в этом не уверен!
PS:Нечего меня обсерать, а потом кричать как малый ребёнок ой он меня стукнул(значит было за что!)Запись от -=ЮрА=- размещена 31.07.2012 в 12:35
-
Много слов и все неверны. CFirst:: - явное указание, что мы вызываем функцию класса CFirst (без всякой виртуальности, вызовется именно функция CFirst или его предка, если функция в CFirst не переопределена или же вызов статической функции. Все. Других вариантов нет. Никаких временных объектов).
1) http://liveworkspace.org/code/... a08032f34e Никаких здесь временных объектов очевидным образом нет.
2) http://liveworkspace.org/code/... 9d2940faab Как ни странно аналогично.
3) http://liveworkspace.org/code/... 96bde7fe4a Очевидно тоже.
Что еще скажешь?
Никогда, если ты юзаешь 1 namespace не будет никаких колизий, а если и будут - разрешить их элементарно. А вот если с десяток namespace используются(примерно одинаковое кол-во использований) - то тут using как-то вообще не катит, но большой проект тебе приводить в пример очевидно никто не будет.Запись от ForEveR размещена 31.07.2012 в 12:38
-
ForEveR NICE try=))))
Первое ты покривил душой на счёт этого
http://liveworkspace.org/code/... bf35c07cbb как видишь твой код бесполезная рухлядь
Твоим кодом занимаюсь сейчас выложу с using namespace
Запись от -=ЮрА=- размещена 31.07.2012 в 13:14
-
Re: "Научись сначала писать чтобы хоть абстракции линковались"
пример был некомпилируемый. для посмотреть. или ты только компилятор умеешь запускать?
----
Re: "Здраствуйте я пишу в КЛИ"
напротив, твое непонимание того, как работает язык наводит на мысль, что ты пишешь на чем-то подобном или на Java.
----
Re: обосрись 1
Юра, ты не читаешь, что я тебе пишу, так хоть себя читай. вот ты написал
----C++ 1 2 3 4 5 6 7 8 9 10 11
class CFirst { public: CFirst(){cout<<"CLASS CFirst constructor\n";} static void SetOutputText(const char * str) //это твой текст и эта функция статическая) //я не виноват, что ты один раз так пишешь, другой раз - наоборот) //конечно, так за тобой не угонишься) { cout<<"CFirst SetOutputText : "<<str<<endl; } };
Re: обосрись 2
твой код
никак не соотносится с моей фразой "в статической функции никогда нельзя вызвать другую функцию не являющуюся статической потому, что статические функции не получают указатель на объект this" (сама фраза надеюсь тобой не ставиться под сомнение потому, что язык C++ так сделан... хотя после твоих "временных объектов" я сомневаюсь)C++ 1 2 3 4 5 6
void CWndTextDlg::SetWindowText(LPCTSTR szTitle) { CString str = szTitle; str = "Virtual fun " + str; CDialog::SetWindowText(str); }
----
жевать километры полета сознания у меня, к сожалению, нет сил. если человек не может выразить свою мысль коротко и словами - это бессилие.Запись от vxg размещена 31.07.2012 в 13:18
-
Запись от vxg размещена 31.07.2012 в 13:20
-
Вот лови http://codepad.org/kqKQiYZF так что если хочешь корректно писать пиши свою специализацию в своём спейсе либо используй уже готовое из stdЗапись от -=ЮрА=- размещена 31.07.2012 в 13:22
-
Не трудись. Специализация шаблонных функций - вещь корректная, однако ее не стоит юзать. То, что ты закоментировал функцию swap - гениальный просто поступок. На тему того как сделать, чтобы работало ничего не меняя - вызвать из main функцию swap вот так ::swap(c1, c2); так что пример я привел плохой. Я тот ответ-то апдейтнул - посмотри.
Сообщение от -=ЮрА=-
Запись от ForEveR размещена 31.07.2012 в 13:22
-
- Хорошо это конструктивно!
Нам ещё с интса преподнисли что вызов CКласс::Function это доступ к методу класса через временный эксземпляр класса.
Тогда конструктивно прошу нормально обсудить этот моент, он впринцие к топику не относится но пусть будет
Мои аргументы если в программе пишем
CКласс elm;elm.Fun();//Прменение метода к экземпляру класса
CКласс::Fun();//Доступ к методу через верменный экземпляр класса хотите временный объект (при этом конструктор не вызывается)Запись от -=ЮрА=- размещена 31.07.2012 в 13:28
-
ForEveR, видимо ты писал не видя этого линка http://codepad.org/kqKQiYZFЗапись от -=ЮрА=- размещена 31.07.2012 в 13:31
-
Запись от Pure размещена 31.07.2012 в 13:33
-
Юра, тебя обманули. Класс::Функция - это одно из следующих:
1. либо вызов статической функции класса в глобальной области видимости. при вызове статической функции внутри любой другой функций класса (в области видимости класса) необходимости в префиксе Класс:: нет. однако есть нюанс. см. 2.
2. либо вызов функции класса в области видимости класса с указанием иной области видимости кроме области видимости текущего класса (тяжело написано, каюсь). такие фокусы используются если у нас есть несколько базовых классов содержащих функции с одинаковыми сигнатурами и мы хотим вызвать точно одну из них.
сейчас попробую пример привести.Запись от vxg размещена 31.07.2012 в 13:34


К спейсам можем?Можем, к экземплярам класса можем?Можем!Так какого ты хрена меня заводишь?!![]:->](http://cyberstatic.net/images/smilies/aq.gif)




