Зменены 7 сакавіка 2010 г.
Гэта пытанні, якія людзі пытаюць мяне часта. Калі ў вас ёсць лепшыя пытанні ці каментары на адказы, не саромейцеся, напішыце мне bs@research.att.com. Калі ласка, памятайце, што я не магу марнаваць увесь свой час палепшыць свае хатнія старонкі.
Гэтая старонка канцэнтруецца на асабістае меркаванне і агульныя пытанні, звязаныя з філасофіяй. Па пытаннях, якія больш непасрэдна звязаныя з C++, моўныя асаблівасці і выкарыстанне C++ гл ў маёй C++ стыль і тэхніку FAQ. Для C++ тэрміналогіі і паняццяў, гл мой C++ гласарый. Для спасылкі на карысныя крыніцы C++ звесткі см. ў маёй C++, старонкаі маёй C++0 х FAQ. Для атрымання інфармацыі аб маіх кніг (у тым ліку агляды і інфармацыйнай падтрымкі), гл маю кнігу спіс. Для дакументаў і нумары ISBN для перакладаў з маіх кніг, гл маю публікацыю спісу.
Некаторыя мае адказы былі пераведзены на кітайскую мову, гл тут (спрошчаны) і тут (традыцыйны).
Для людзей, якія не могуць атрымаць гук, вось прапанова: Абодва маіх імёны прамаўляюцца з двух складоў: Bjar-пе-Strou strup.
Ні, ні B J ў маіх першых імёнаў і падкрэсліў М. даволі слабая так што, магчыма Бе-ар-NEH або Па-ар-пе дасць ідэю. У першага ў маёй прозвішчы на?самой справе павінна было быць V які робіць першы склад канца далёка ўніз па горла: Strov-strup. У другога чымсьці нагадвае OO ў ООП, але ўсё ж коратка, можа быць, Strov-струпа дасць ідэю.Так, гэта, верагодна, найбольш часта задаюць пытанне:-)
PS Мой першы клічуць Б'ёрн - не Б'ёрн (не імя), Бьерн (звязаных, але іншае імя), ні Барні (не звязаныя імя).
Маё другое імя Страуструп - не Stroustroup, Stroustrop, Strustrup, Strustrop, Strustroup, Straustrup, ні Straustroup (дакументы, выкарыстоўваючы кожны з гэтых памылкамі друку можна знайсці з дапамогай Google).
Ніжэй прыведзены спасылкі на
Таксама, калі вы напішыце мне, калі ласка, паспрабуйце пераканацца, што я магу адказаць вам.
Я сапраўды ненавіджу, калі я напісаў і адправіў адказ, толькі каб выявіць, што зваротны адрас з'яўляецца несапраўдным або недаступныя.Два выгляду паведамленні маюць адносна высокія шанцы заблудзіцца: хатняе заданне пытанняў і пытанняў у форме "як я магу выкарыстоўваць гэтую ўласнасць бібліятэку?".
Я крыху сумна не адказвае апошнім пытаннях, таму што часта чалавек просіць не разумее, што DOS, Windows, або любы іншы інтэрфейс C++ не ўваходзіць у стандарт З++ (і я не ў стане угнацца за вялікай колькасцю C++ бібліятэкі). Калі вы не атрымалі адказу, калі ласка, разгледзець, калі ваш пытанне быў адной з гэтых відаў.Акрамя таго, калі Вы даяце сваё прозвішча, і я цяпер, верагодна, каб выдаліць паведамленне непрачытаных.
Гэта новая палітыка. Я ніколі не быў вялікім прыхільнікам псеўданімамі, але я лічу, што шанец на ветлівае тэхнічных гутарку з чалавекам, які думае, што гэта прахалодна, каб схавацца за імя, як suuupergeeek або coolGuy3 становіцца занадта нізкай для мяне турбуюць спробы.
Тое, што выглядае "крута і сучаснай" каму-то часта лічыцца благім густам кімсьці іншым, а мода хутка змяняцца.
Акрамя таго, вельмі просты HTML загружае і адлюстроўвае хутчэй, чым усе астатняе, і многія людзі ўсё яшчэ пакутуюць ад павольных злучэннях Інтэрнэту.
Заняткі там, каб дапамагчы вам арганізаваць ваш код і разважаць аб сваіх праграмах.
Вы маглі б прыкладна сказаць, што эквівалентна класы існуюць, каб дапамагчы вам пазбегнуць памылак і, каб дапамагчы вам знайсці памылкі пасля таго, вы робіце памылку. Такім чынам, класы значна дапамагае абслугоўвання.Клас прадстаўлення ідэі, канцэпцыі, у кодзе.
Аб'ект класа уяўляе канкрэтны прыклад ідэі ў кодзе. Без класаў, чытач кода б здагадацца аб адносінах паміж элементамі дадзеных і функцыі - класы робяць такіх адносін відавочных і "зразумеў" кампілятара. З класаў, больш высокага ўзроўню, структуры вашай праграмы, прадстаўленыя ў кодзе, а не толькі ў каментарах.Добра распрацаваны клас ўяўляе просты і зразумелы інтэрфейс для сваіх карыстальнікаў, хаваючы сваё прадстаўніцтва і захаванне сваіх карыстачоў ад неабходнасці ведаць аб гэтым прадстаўленне.
Калі ўяўленне не павінна быць утоена - напрыклад, таму, што карыстачы павінны мець магчымасць змяніць любы элемент дадзеных так, як ім падабаецца - вы можаце думаць аб тым, што клас як "проста звычайная старая структура даных", напрыклад:Структура Пара {пары (сопзЬ радок & п, сопз радок & V): імя (п), значэнне (у) {} радок імя, значэнне};Звярніце ўвагу, што нават гэтыя структуры могуць атрымаць выгаду з дапаможных функцый, такіх як канструктары.
Пры праектаванні класа, часта бывае карысна разгледзець, што гэта дакладна для кожнага аб'екта класа і ва ўсе часы.
Такое ўласцівасць называецца інварыянтнай. Напрыклад, інварыянтаў вектара можа быць, што яго прадстаўленне складаецца з паказальніка на лік элементаў і, што колькасць элементаў захоўваецца ў цэлае лік. Гэта праца кожнага канструктара для стварэння класа інварыянт, такім чынам, каб кожны член функцыя можа спадзявацца на яго. Кожны член функцыя павінна пакідаць інварыянтнай сілу з моманту выхаду. Такое мысленне асабліва карысна для класаў, якія кіруюць рэсурсамі, такіх як замкі, разеткі і іншыя файлы. Напрыклад, клас дэскрыптар файла будзе інварыянтнай, што ён утрымоўвае паказальнік на адкрыты файл. Канструктар дэскрыптар файла адкрывае файл. Деструкторы свабодных рэсурсаў, набытых канструктараў. Напрыклад, деструктор дэскрыптар файла закрывае файл, адкрыты ў канструктару:Клас file_handle {грамадскасці: file_handle (сопзЬ сЬаг * п, сопзЬ сЬаг * RW) {F = Еореп (п, RW), калі (F == 0) кінуць Open_failure (п);} ~ file_handle () {fclose (е);}//деструктор//... прыватныя: FILE * F;};Калі вы яшчэ не запраграмаваныя з класамі, Вы знойдзеце часткі гэтага тлумачэння незразумелых і вы будзеце недаацэньваць карыснасць класаў. Паглядзіце на прыклады. Як і ўсе добрыя падручнікі, TC++ PLмае мноства прыкладаў, гл, напрыклад, Тур стандартнай бібліятэкі. Большасць сучасных C++ бібліятэкі складаюцца (акрамя ўсяго іншага) класаў і бібліятэк падручнік з'яўляецца адным з лепшых месцаў, каб знайсці прыклады карысных класаў.
Ёсць шмат азначэнняў "аб'ектна-арыентаваным", "аб'ектна-арыентаванае праграмаванне" і "аб'ектна-арыентаваных моў праграмавання".
Для доўгія тлумачэнні таго, што я называю "аб'ектна-арыентаваным", чытайце Чаму C++ не толькі аб'ектна-арыентаваная мова праграмавання. Тым не менш, аб'ектна-арыентаванага праграмавання з'яўляецца стыль праграмавання, якія адбываюцца з Simula (каля 40 гадоў таму!), Абапіраючыся інкапсуляцыі, атрымання ў спадчыну і палімарфізму. У кантэксце C++ (і шматлікіх іншых мовах з іх каранямі ў Simula), гэта азначае, праграмаванне з выкарыстаннем іерархіі класаў і віртуальных функцый, якія дазваляюць маніпуляцыі аб'ектамі розных тыпаў праз выразна вызначаныя інтэрфейсы і дазваляюць праграме быць прадоўжаны паступова праз выснову.Глядзіце Што добрага аб класах? за ідэю аб тым, што вялікая аб "простых класаў".
Справа аб арганізацыі класаў у іерархіі класаў заключаецца ў выразе іерархічныя адносіны паміж класамі і выкарыстоўваць гэтыя адносіны для спрашчэння кода.Каб сапраўды зразумець ААП, шукаць нейкія прыклады.
Напрыклад, у вас можа быць дзве (ці больш) драйвераў прылад з агульным інтэрфейсам:клас драйвераў {//агульны інтэрфейс драйвера публіцы: віртуальнае Int чытаць (знак * р, Int N) = 0; //чытаем макс п знакаў з прылады на р //вяртае колькасць прачытаных знакаў віртуальнай Ьоо скіду () = 0; //скід прылады віртуальнай праверыць статус () = 0; //чытаем стане};Гэты драйвер проста інтэрфейс. Яна вызначаецца без звестак членаў і мноства чыстых віртуальных функцый. Драйвер можа быць выкарыстаная праз гэты інтэрфэйс і шмат розных відаў кіроўцы могуць рэалізоўваць гэты інтэрфейс:
Driver1 класа: грамадскія драйвераў { //кіроўца грамадскасці: Driver1 (Register); //канструктар Int чытаць (знак *, Int п); Ьоо скіду (); Праверка стану (); прыватныя: //дэталі рэалізацыі, у тым ліку. прадстаўленне}; Driver2 класа: грамадскія драйвераў { //іншага кіроўцы грамадскасці: Driver2 (Register); Int чытаць (знак *, Int п); Ьоо скіду (); Праверка стану (); прыватныя:. //дэталі рэалізацыі, у тым ліку, прадстаўленне};Звярніце ўвагу, што гэтыя драйверы захоўвання дадзеных (дзяржаўнай) і аб'ектаў, з іх не можа быць створаны. Яны рэалізуюць функцыі, вызначаныя ў драйвер. Мы можам ўявіць сабе выкарыстоўванага драйвера накшталт гэтага:
несапраўдным е (Driver & D) //выкарыстоўваць драйвер {статус old_status = d.check (); //... d.reset (); сімвал BUF [512]; Int х = d.read (BUF, 512); //...}Ключавым момантам тут з'яўляецца тое, што F () не трэба ведаць, які тып драйвера ён выкарыстоўвае: усё, што трэба ведаць, што ён перадаецца драйвера, гэта значыць інтэрфейс да розных відах кіроўцаў. Мы маглі б спасылацца е () наступным чынам:
несапраўдным г () {Driver1 d1 (Рэгістр (0xf00)); //ствараем Driver1 для прылады //з прыладай рэгістрацыі па адрасе 0xf00 Driver2 d2 (Рэгістр (0xa00)); //ствараем Driver2 для прылады //з прылады рэгістрацыі па адрасе 0xa00 //... Int распрацоўніка; CIN>> распрацоўніка, калі (Dev == 1) F (d1); //выкарыстанне d1 яшчэ ж (d2); //выкарыстанне d2 //... }Заўважым, што пры F () выкарыстоўвае драйвер правільны выгляд аперацыі няяўна абраны падчас выканання. Напрыклад, калі F () перадаецца d1, d.read () выкарыстоўвае Driver1: чытаць (), у той час, калі F () перадаецца d2, d.read () выкарыстоўвае Driver2: чытаць (). Гэта часам называюць падчас адпраўкі ці дынамічнай дыспетчарызацыі. У гэтым выпадку няма ніякай магчымасці, што F () мог ведаць тып прылады яна называецца, таму што мы выбіраюць яе, грунтуючыся на ўваходзе.
Калі ласка, звярніце ўвагу, што аб'ектна-арыентаванае праграмаванне не з'яўляецца панацэяй. "ААП" азначае не проста "добра" - калі Ёсць няма уласцівага іерархічныя сувязі паміж асноўнымі паняццямі ў вашай праблемы, то ніякае колькасць іерархіі і віртуальных функцый палепшыць ваш код. Сіла ООП, што Ёсць шмат праблем, якія могуць быць з карысцю выяўляецца з дапамогай іерархіі класаў - галоўная слабасць ААП з'яўляецца тое, што занадта шмат людзей спрабуюць прымусіць занадта шмат праблем у іерархічнай форме. Не кожная праграма павінна быць аб'ектна-арыентаваным. У якасці альтэрнатывы, разгледзім просты класаў, абагульненага праграмавання, і свабодна стаяць функцыі (як у матэматыцы, З і Fortran).
Generic праграмаванне праграмавання на базе параметризации: Вы можаце параметризации тыпу з іншым (напрыклад, вектар з тыпамі элементаў) і алгарытм з адным (напрыклад, функцыя сартавання з функцыяй параўнання).
Мэта абагульненага праграмавання з'яўляецца абагульненне карысную структуру алгарытм або дадзеныя для найбольш агульнай і карыснай форме. Напрыклад, вектар цэлых лікаў у парадку, і так гэта функцыя, якая знаходзіць найбольшае значэнне ў вектар цэлых лікаў. Тым не менш, агульнае рашэнне, якое забяспечвае вектар любога тыпу карыстальнік захоча выкарыстаць і функцыю, якая знаходзіць найбольшае значэнне ў любы вектар, яшчэ лепш:вектарГэтыя прыклады ўзятыя з STL (кантэйнеры і алгарытмы частка ISO C++ стандартная бібліятэка), для кароткага ўвядзення, гл Тур стандартнай бібліятэкіад TC++ PL.
Абагульненае праграмаванне з'яўляецца ў пэўным сэнсе больш гнуткія, чым аб'ектна-арыентаванага праграмавання.
У прыватнасці, ён не залежыць ад іерархіі. Напрыклад, няма іерархічных адносін паміж Int і радкі. Абагульненае праграмаванне як правіла, больш структураваныя, чым ООП, на самай справе, агульны тэрмін, які выкарыстоўваецца для апісання абагульненага праграмавання з'яўляецца "параметрычны палімарфізм", з "Спецыяльная палімарфізм" быць адпаведны тэрмін для аб'ектна-арыентаванага праграмавання. У кантэксце C++, абагульненае праграмаванне вырашае ўсе імёны на этапе кампіляцыі, яно не звязана з дынамічнай (падчас выканання) адпраўкі. Гэта прывяло абагульненага праграмавання, каб стаць дамінуючым у раёнах, дзе падчас выканання мае важнае значэнне.Звярніце ўвагу, што абагульненае праграмаванне не з'яўляецца панацэяй.
Ёсць шмат частак праграмы, якія не маюць патрэбу ў параметризации і шмат прыкладаў, калі падчас адпраўкі (ААП) не патрабуецца.
Для людзей, якія не запраграмаваны да або прыходзяць з іншай мовы і хочуць адносна спадзісты ўвядзенне ў сучасным C++, разгледзім Праграмаванне: прынцыпы і практыка выкарыстання C++.
Гэта кніга, якую я напісаў для пачаткоўцаў (першы год студэнты універсітэта) праграмавання класа і ён выйграў ад трох гадоў выкарыстання ў класе.Для людзей, якія праграмісты і жадае, каб даведацца новыя канцэпцыі і прыёмы з класічнага падручніка, я рэкамендую, C++ Programming Language (3-е выданне).
Гл. нататку аб структуры, зместу і мэтам "C++ Programming Language (3-е выданне)": Кніга прызначана для праграмістаў з некаторым вопытам і хочаце асвоіць C++. Яна не накіравана на не-праграмістаў, спрабуючы даведацца іх першы мова праграмавання або выпадковага праграмісты спрабуюць атрымаць павярхоўнае ўяўленне пра C++ як мага хутчэй. Такім чынам, гэтая кніга прысвечана канцэпцыі і метады, і выходзіць на які болю быць поўнымі і дакладнымі. У ім апісваецца "чысты З++", гэта значыць мова, незалежна ад якой-небудзь асяроддзі распрацоўкі праграмнага забеспячэння або фонд бібліятэкі (акрамя стандартнай бібліятэкі, вядома).Калі вы хочаце ведаць, чаму C++, так яно і ёсць, паглядзіце на Дызайн і эвалюцыя C++ (D & E).
Разуменне праектных крытэрыяў і абмежаванняў дапамагае лепш пісьмова праграм.
На TAMU, мы выкарыстоўваем Праграмаванне: прынцыпы і практыка выкарыстання C++ , каб атрымаць першакурснікаў (1-ы курс) па асновах C++ і метады праграмавання ён падтрымлівае (у прыватнасці, аб'ектна-арыентаванае праграмаваннеі абагульненае праграмаванне) у семестр.
З іншага боку, калі вы хочаце быць цалкам задавальняе ўсе асноўныя C++ моўныя канструкцыі, з абстракцыі дадзеных, аб'ектна-арыентаванае праграмаванне, абагульненае праграмаванне, аб'ектна-арыентаванага дызайну і г.д., вы можаце лёгка выдаткаваць год ці два - калі Вы яшчэ не знаёмыя з тымі метадамі (скажам, ад Java або C #).
Гэта той час, якое патрабуецца, каб даведацца C++?
Можа быць, але зноў жа, гэта значыць тэрміны, мы павінны разгледзець, каб стаць лепш дызайнерамі і праграмістамі. Калі драматычныя змены, як мы працуем і думаем аб пабудове сістэм не з'яўляецца нашай мэтай, то навошта вывучаць новы мову? У параўнанні з Час, неабходнае, каб навучыцца граць на фартэпіяна або стаць свабодна гаворыць на замежных (натуральнага) мовы, навучанне новых і розных моў праграмавання і праграмавання стыль лёгка.Для большай колькасці назіранняў аб вывучэнні C++ гл D & Eабо запіску ад comp.lang.c++ , які я напісаў некаторы час назад.
Глядзіце навучання Standard C++ як новага мовы для абмеркавання выбар C++ канструкцый, метадаў і бібліятэк для навучання ў раннім узросце.
Для прыкладу кніг, якія прымае гэты падыход сістэматычна гл. Страуструпа: Праграмаванне: прынцыпы і практыка выкарыстання C++і Koenig & Му: "Паскоранае C++" ад Addison Wesley ў C++ In Depthсерыі.
Вам спатрэбіцца падручнік для навучання C++.
Гэта той выпадак, нават калі ваша рэалізацыя ідзе з дастатковым он-лайн дакументацыі. Прычына ў тым, што мова і бібліятэку дакументацыі разам з прыкладамі кода не з'яўляюцца добрымі настаўнікамі паняццяў. Як правіла, такія крыніцы маўчаць пра тое, чаму ўсё так, як яны ёсць, і якія перавагі вы можаце чакаць (і які вы не павінны чакаць) з тэхнікай. Засяродзьцеся на канцэпцыі і метады, а не мовы тэхнічныя дэталі.Выбіраючы кнігу, паглядзіце на адзін, які ўяўляе Standard C++ і выкарыстоўваць стандартныя сродкі бібліятэкі на аснове комплекснага падыходу з самага пачатку.
Напрыклад, чытаючы радкі з уваходнага павінен выглядаць прыкладна такРадок с; //Standard C++ стыль CIN>> с;і не так
сімвал з [MAX]; /* Standard C стылю * /зсапЕ ("% S", з);Шукайце кнігі рэкамендацыі ад праграмістаў з цвёрдымі C++ вопыт.
Я рэкамендую Праграмаванне: прынцыпы і практыка выкарыстання C++, але памятайце, што ніхто не кніга лепш для ўсіх.
Звярніце ўвагу на рэцэнзіі на АККУ (Асацыяцыі C і C++ карыстальнікаў) сайта.Мэта пісаць ідыёматычны C++: пазбягайце проста пісаць код у стылі вашага папярэдняга мову з дапамогай C++ сінтаксіс, мала што можна атрымаць ад простага змены сінтаксісу.
Акрамя таго, няма, я не прапаную "добры праект для студэнтаў для працы на".
Мой вопыт паказвае, што вучыцца досыць аб студэнт і яго/яе курс, каб ведаць, што ўзровень складанасці патрабуецца і які праект уяўляе цікавасць займае шмат часу. Думаць аб добрым праекце, то нетрывіяльнае, і растлумачыць, што менавіта праект і як падысці да яго можа заняць некалькі паведамленняў і некалькі гадзін. Я проста не маюць, што такое час. Памятаеце, што гэтыя запыты прыходзяць па крайняй меры раз у тыдзень. Нарэшце, некаторыя студэнты, падобна, ідэя, што калі я прапаную праект, я маральна абавязаны падаць досыць падрабязную даведку па яго завяршэнні.Ідэі: Паглядзіце на вучэннях у МС++ PL3 або іншыя добрыя падручнікі.
Многія з тых, практыкаванні прызначаны для трымаць студэнт заняты на працягу некалькіх дзён, і чытаць гэтыя практыкаванні могуць натхніць прадпрымальны студэнт да так-то падобнае. Ці паглядзіце на не-кампутарных навук часткай вашага свету: Можа быць, біялогіі праект мог бы выкарыстаць для падтрымкі новага прылады вымярэння або сябрам вывучэння гісторыі маглі б выкарыстоўваць палепшаны інтэрфейс базы дадзеных. Многія з лепшых праектаў і лепшае выкарыстанне кампутараў знаходзяцца па-за межамі традыцыйных кампутарных навук.Глядзіце таксама маю C++ стыль і метады FAQ.
Рэальная пачаткоўцаў, якія стаяць перад іх першым "чытаем трохі дадзеных, зрабіць што-то да яго, і вырабляць якія-небудзь дадзеныя" практыкаванні могуць быць зацікаўлены ў вельмі простая праграма або праграма чытання радкі з ўваходны.
C++0 хбудзе яшчэ лепш.
Гэта мова і стандартныя бібліятэкі апісаны ў C++ Programming Language (3-е выданне).
C++ кампілятар і бібліятэкі пастаўшчыкі ўжо пастаўляе рэалізацыі, якія вельмі блізкія да праекту стандарту.Першы праект наступны стандарт C++0 х, знаходзіцца ў публічнага разгляду і канчатковага галасавання, як чакаецца, у 2010 годзе.
C++ стандарт (ISO/IEC 14882) даступны для запампоўкі на ANSI электронны магазін.
Пошук па "14882", знайсці "INCITS/ISO/IEC 14882-2003 Мовы праграмавання - C++" кошт (калі я пішу гэта) US $ 30,00 запазычанасці он-лайн з дапамогай крэдытнай карты. Спампаваць дакумент ў фармаце PDF формы, каля 3Mb агульны памер.Праект стандарту, як гэта было ў больш позніх стадыях працэсу стандартаўможна спампаваць бясплатна.
Майце на ўвазе, што стандарт не падручнік, і нават эксперт праграмісты зробяць лепш даведацца пра C++ і новага C++ функцыі з падручніка.
Глядзіце мой C++0 х FAQдля спасылкі на C++0 х матэрыял.
Большасць магчымасцяў я не люблю з мовы гледжання праектавання (напрыклад, сінтаксіс і описатель масіва распад) з'яўляюцца часткай падмноства З З++ і не могуць быць выдалены без нанясення шкоды праграмістаў, якія працуюць у рэальных умовах.
C++ з C сумяшчальнасць ключавых дызайнерскае рашэнне мове, а не маркетынгавы трук. Сумяшчальнасць было цяжка дасягнуць і падтрымліваць, але рэальную карысць рэальным праграмістам прывёў, і да гэтага часу вынік сёння. Да цяперашняга часу, C++ мае асаблівасці, якія дазваляюць праграмістам ўстрымацца ад выкарыстання найбольш праблемных З асаблівасцямі. Напрыклад, стандартныя кантэйнеры бібліятэкі, такія як вектар, спіс, карта, і радок можа быць выкарыстаная, каб пазбегнуць найбольш складаных нізкаўзроўневых паказальнік маніпуляцыі.
Асабіста я імкнуся не выкарыстоўваць тэрмін "C+ 03", таму што гэта лёгка зблытаць з "C++0 х" і можа скласціся ўражанне, што C+ 98 састарэлая.
Звярніце ўвагу, што мова З++ будзе заставацца стабільнай, паколькі сумяшчальнасць заўсёды выклікае сур'ёзную занепакоенасць.
Камітэт імкнецца не парушаць вашы (стандартны адпаведны код).Я коратка прадставіў некаторыя з маіх ідэй на панэлі ў SD2001w і ў трохі больш падрабязна ў дакладзе на канферэнцыі вясной 2002 ACCU.
Глядзіце таксама мае правілы для дызайну З++0 х і іншых нядаўніх работ на маёй старонцы публікацый. Для больш поўнага спісу прапаноў гл. WG21 сайта.
Па цэлым шэрагу прычын, планавай замены ("ARM++"), які апісвае стандарт ISO C++ і не была напісана.
Як працаваць на C++0 х зараз ідзе, гэта занадта позна для ARM++ на аснове ISO C++ 1998. Мне здаецца, што я не знайду час, каб напісаць новы ARM. 4-е выданне TC++ PL і 2-е выданне Праграмаванне: прынцыпы і практыка выкарыстання C++ , каб адпавядаць C++0 х (калі C++0 х стала дамінуючай C++), верагодна, будуць больш важнымі.
Дзіўна, нямецкі пераклад "Special Edition" завецца 4-е выданне.
Калі сур'ёзна, розніца паміж бягучых наклады спецыяльныя выданні і 3-е выданне проста цвёрдым пераплёце (і розніца ў кошце маецца на ўвазе, што больш моцныя вокладкі).
Калі б я быў?C++ праграміст, які не чытаў C++ Programming Language (3-е выданне), я б купляць і чытаць або 3-е выданне або спецыяльнае выданне.
Калі б я выкарыстаў мае падручнікі і спасылкі цяжка, я б абраў цвёрдым пераплёце. Вечка на трэці лепшы мяккай вокладцы даступная, але яна не роўная цвёрдай вокладцы спецыяльнага выдання.Калі ў мяне ўжо было 3-е выданне, я б купіў SE, калі мой дзеючы асобнік быў зношванне або калі копія была ранняй друку (трэці ў цяперашні час каля 30 друкаваных выданняў і ГП каля 20).
У параўнанні з першым друку, спецыяльныя выданні і апошнія наклады маюць 3-е выданне 1000+ выпраўленні і ўдакладненні.
У цяжкіх C++ карыстачу, я лічу, што значным. Ёсць таксама два новых прыкладанні (крыху больш за 100 старонак і даступны для запампоўкі: Мовы і стандартнай бібліятэкі Надзейнае выключэнне).Існуючыя матэрыял не рухаўся так нумары старонак могуць быць выкарыстаны для абазначэння матэрыялу ў старых друкаваных выданняў, новыя накладам 3-е выданне, а ў SE.
SE таксама паляпшэнне азначніка.
Addison-Wesley прапануе электронную версію праз Safari онлайн богаслужбовых кнігах
За няпоўны пералік C++ рэалізацыі, гл. мой C++ кампілятараў спіс.
Таксама, дзе гэта магчыма, аддаюць перавагу стандартныя бібліятэкі для нестандартных "бібліятэкі фонду" і імкнуцца звесці да мінімуму выкарыстанне ўласных пашырэнняў.
Большая частка адносная прастата Java - як і для большасці новых моў - збольшага ілюзія, а часткова ў залежнасці ад яго няпоўнасць.
Чым больш праходзіць часу, Java будзе расці значна ў памерах і складанасці. Гэта будзе падвойны або патройны памер і рост залежыць ад рэалізацыі пашырэнняў і бібліятэк. Вось так кожны камерцыйна паспяховых мовы распрацаваў. Дастаткова зірнуць на любы мову вы лічыце паспяховымі на вялікіх маштабах. Я не ведаю ні аднаго выключэння, і Ёсць важкія прычыны для гэтага з'явы. [Я напісаў гэтую да 2000 года; цяпер бачыць папярэдні прагляд Java 01/05.]Я пракаментаваў (адмоўна) аб шуміха Java і прыпісваецца вялікая частка поспеху Java на маркетынг.
Напрыклад, гл маю HOPL-3 паперы. Сёння (2010), сцвярджэнняў аб Java больш рэальнасці заснаваныя і менш бязвыплатна прыніжальны аб альтэрнатывах. Гэта не заўсёды так. Напрыклад, параўнаць арыгінальную 1995 Java-белая папера з версіі вы знойдзеце на вэб-сайце (часам з надпісам "арыгінальныя афіцыйны дакумент Java"); стар 69 будзе добрым месцам для пачатку.Java не залежыць ад платформы, гэта платформа.
Як і ў Windows, гэта ўласныя камерцыйныя платформы. Гэта значыць, вы можаце пісаць праграмы для Windows/Intel або Java/JVM, і ў кожным выпадку вы пішаце код для платформы належаць адной карпарацыі і аптымальнай для камерцыйнай выгады ад гэтай карпарацыі. Было адзначана, што вы можаце пісаць праграмы на любой мове, для віртуальнай машыны Java і звязаныя з аперацыйнымі сістэмамі аб'ектаў. Тым не менш, віртуальная машына Java, і г.д., якія моцна зрушаныя ў карысць Java. Гэта далёка не будучы агульным разумна мовы В. М./OS.Асабіста я буду прытрымлівацца разумнай партатыўных C++ для большасці відаў работ я думаю, больш за ўсё і выкарыстоўваюць розныя мовы для адпачынку.
. Калі вы хочаце напісаць выключна для Чыстая платформы, C # гэта не самы горшы альтэрнатыва, але памятайце, што З++ з'яўляецца цалкам падтрымлівае - хоць і менш моцна разадзьмутымі - альтэрнатыва для гэтай платформы.
CLI падае набор інтэрфейсаў (у сістэме аб'ектаў), якія моцна адрозніваюцца ад традыцыйных інтэрфейсаў аперацыйнай сістэмы сродкаў і прыкладанняў.
У прыватнасці, гэтыя інтэрфейсы маюць семантыку, якая не можа быць поўнасцю або зручна выказаць у звычайных мовах праграмавання. Адзін са спосабаў апісання CLI гэтак жа (часткова) "платформы" або "віртуальнай машыны". Яна складаецца з вялікага набору функцый мовы (ўспадкоўванне, метады, пятля канструкцый, механізмаў зваротнага выкліку і г.д.), падтрымка вялікага набору бібліятэк падставы (BCL), а таксама прадуманая сістэма метададзеных. CLI часам апісваецца як "мова нейтральны". Тым не менш, мова, які не прымае вялікае падмноства з гэтых аб'ектаў не можа выкарыстаць нават Basic. NET аб'ектаў (або будучай АС Microsoft Windows сродкаў, мяркуючы, што планы Microsoft не змяняюцца) і мова, які не можа выказаць усегэтыя функцыі не могуць быць выкарыстоўваецца для рэалізацыі рэсурсаў азначае, якімі могуць карыстацца іншыя мовы. Такім чынам, CLI з'яўляецца "нейтральнай мовай" толькі ў тым сэнсе, што кожны мова павінна падтрымліваць усе CLI функцый, якія будуць "першакласных" на. Net.Я аддаю перавагу абавязковае для выканання некалькіх прымітываў, прадставіць у выглядзе простых выклікаў функцый і простыя структуры дадзеных на любой мове, магчыма, інкапсуляваць у пэўным мове бібліятэк.
Для CLI, гэта можа ў лепшым выпадку будзе зроблена для спажыўцоў аб'ектаў CLI толькі. Мова, які выкарыстоўваецца для вытворчасці CLI модулі павінны быць у стане выказаць усе аб'екты CLI, уключаючы метададзеныя. Толькі мову, які можа зрабіць гэта можна лічыць моўных сістэм праграмавання на. Net. Такім чынам, Microsoft C++ Група прыйшла да высновы, што толькі ўбудаваны мова аб'ектаў, прымальных для сваіх кліентаў. Іх дызайн адлюстроўвае меркаванне, што прымае абсалютна ніякіх абмежаванняў на тое, што частка CLI можа быць выяўленае ў C++ з C++/CLI пашырэнняў, абсалютна ніякага шматслоўе параўнанні з іншымі мовамі пры выкарыстанні CLI аб'ектаў, а таксама абсалютна ніякіх накладных расходаў у параўнанні з іншымі мовамі. Яны накіраваныя на захаванне C++ у якасці дамінуючага мовы сістэмы праграмавання для Windows.Як заўсёды, я стаўлю акцэнт на партатыўнасцьі рэкамендаваць людзям для распрацоўкі прыкладанняў, так што доступ да сістэмы канкрэтных аб'ектаў праз выразна вызначаныя інтэрфейсы, названыя ў ISO C++ (напрыклад, не выкарыстоўваць C++/CLI наўпрост).
У Windows, гэта часам можа быць нязручна ў параўнанні з выкарыстаннем C++/CLI аб'екты наўпрост, але гэта адзіны спосаб атрымаць мабільнасць і ступень незалежнасці ад вытворцы. Відавочна, што зброя даўжынёй падыход да CLI не можа быць забяспечана, калі мэта кавалак кода з'яўляецца прадастаўленне CLI інтэрфейс для спажывання іншым кодам. Звярніце ўвагу, што я прызнаю неабходнасць сістэмна-арыентаваных пашырэнняў і, што Microsoft не толькі C++ пастаўшчыка з такімі пашырэннямі, я проста моцна аддаюць перавагу мець справу з такімі пашырэннямі праз "тонкія інтэрфейс", паказаны ў стандарце ІСО C++.Як працаваць з сістэмай спецыфічных пашырэнняў па сваёй сутнасці складанае пытанне.
Microsoft C++ каманды, асабліва Херб Саттер, захавала актыўны дыялог з (іншымі) чальцоў ISO C++ стандарты камітэта такім чынам, каб адносіны паміж ISO C++ і пашыраны C++/CLI ў канчатковым рахунку будзе распрацавана. У нас ёсць доўгі паслужны канструктыўнай сумеснай працы ў ISO C++ камітэта. Акрамя таго, для мінімізацыі блытаніны паміж ISO C++ і C++/CLI пашырэнняў, Microsoft у цяперашні час пераглядаюць свае Visual C++ дакументацыі, каб паспрабаваць выразна адрозніваць C++/CLI з ISO C++ (просты некваліфікаваны C++ азначае, ISO C++). Я спадзяюся, што іншыя будуць вынікаць, што свінец.На складаным і супярэчлівым пытаннем аб тым, што CLI абавязковымі/пашырэнняў для C++ будзе называцца, я аддаю перавагу C++/CLI, як скарачэнне для "пашырэння інтэрфейсу каманднага радка ISO C++".
Захоўванне C++ як частка назвы нагадвае людзям, што з'яўляецца базавым мовай і дапаможа захаваць C++ ўласнае падмноства C++ з C++/CLI пашырэнняў. C/C++ праблемы сумяшчальнасці паказаць, як важна захаваць гэта падмноства уласнасці.Вось некаторыя дакументы, звязаныя з C++/CLI:
Часта паспяховая праграма прыкладанні/у кліентаў/карыстальнікаў, якія аддаюць перавагу разнастайнасць платформаў.
Набор пажадана платформаў змены як змены колькасці карыстальнікаў. Будучы прывязаныя да адной платформе або аднаго пастаўшчыка, абмяжоўвае прымяненне/праграма "Патэнцыял выкарыстання.Відавочна, што поўная незалежнасць ад платформы несумяшчальная з магчымасцю выкарыстоўваць усе платформы канкрэтных аб'ектаў.
Тым не менш, часта можна прыблізны незалежнасць платформы для прыкладанняў шляхам доступу платформы сродкі праз "тонкія інтэрфейс", якая прадстаўляе гледжання прыкладання яго навакольнага асяроддзя, як бібліятэка.
"Некаторыя рэцэнзенты папрасіў мяне параўнаць C++ з іншымі мовамі Гэта я вырашыў не рабіць Такім чынам, я зноў пацвердзіў даўняе і цвёрдае перакананне:... Мова параўнання рэдка значных і яшчэ радзей справядлівай добрае параўнанне асноўных праграмавання моў патрабуе больш намаганняў, чым большасць людзей гатовыя выдаткаваць, досвед працы ў шырокім дыяпазоне абласцей прымянення, жорсткая падтрыманне асобных і бесстаронні погляд, і пачуццё справядлівасці. У мяне няма часу, і як дызайнер З++, мая бесстароннасць ніколі не будзе ў поўнай меры заслугоўвае даверу.
Я таксама турбавацца пра з'яву я неаднаразова назіраў у сумленнай спробы мовай параўнанняў.
Аўтары імкнуцца быць бесстароннім, але безнадзейна перадузятым, засяродзіўшы ўвагу на адно прыкладанне, адзіны стыль праграмавання, або адной культуры сярод праграмістаў. Горш, калі на адной мове, значна больш вядомы, чым іншыя, тонкае змяненне ў перспектыве адбываецца: Недапрацоўкі вядомага мовы лічацца нязначнымі і простыя рашэнні прадстаўленыя, тады як аналагічныя дэфекты на іншых мовах, якія лічацца асноватворнымі. Часта, абыходныя шляхі, звычайна выкарыстоўваюцца ў менш вядомых моў проста невядомых людзей, якія робяць параўнання або лічыцца нездавальняючым, паколькі яны будуць непрыдатным да працы ў больш знаёмым мове.Акрамя таго, інфармацыю аб добра вядомым мове, як правіла, які поўнасцю адпавядае сучасным патрабаванням, а для менш вядомых моў, аўтары абапіраюцца на некалькі гадоў інфармацыю.
Для моў, якія варта параўнанне, параўнанне мовы X, як гэта вызначана тры гады назад у параўнанні з мовы Y, як ён з'яўляецца ў апошняй эксперыментальная рэалізацыя не з'яўляецца ні справядлівым, ні інфарматыўным. Такім чынам, я ўсталяваць абмежаванні на каментары пра іншых мовах, акрамя C++ для абагульненняў і вельмі канкрэтных заўваг ".Тым не менш, я лічу, C++ лепшы выбар мовы праграмавання для шырокага кола людзей і прыкладанняў.
Пры поглядзе на мове параўнання разгледзець, хто напісаў яго, падумайце, калі апісанні фактычнай і справядлівай, а таксама калі крытэрыяў параўнання самі па сабе з'яўляюцца справядлівымі для ўсіх моў разглядаецца.
Гэта нялёгка.
Добра напісаныя C, як правіла, З++ і.
Напрыклад, кожны прыклад у Кернигана і Рычы: "Мова праграмавання C (другое выданне)" таксама C++ праграмы.Прыклады C/C++ праблем з сумяшчальнасцю:
Int асноўных () {падвойныя SQ2 = SQRT (2);/* Не З++: выклік неаб'яўленай функцыі */Int S = SizeOf ('');/* маўчыць розніца: 1 ў C++ SizeOf (INT) у C */}Выклік неабвешчаная функцыя бедных стыль у З і незаконным ў C++. Так перадачы аргументаў на функцыю, выкарыстоўваючы заяву, што не спіс аргументаў тыпу:
несапраўдным е ();/* аргумент тыпу не згаданых */несапраўдным г () {е (2);/* дрэнным стылі C. Ня C++ */}У C, пустэча * можна няяўна пераўтварыць у любы тып паказальніка, і свабодна-краме размеркавання, як правіла, робіцца з дапамогай таНос (), якая не мае магчымасці праверыць, калі "дастаткова" памяці прапануецца:
пустата * таНос (size_t); пустэча ж (Int N) {Int * р = таНос (п * SizeOf (Char));/* не C++. У C++, вылучаюць, выкарыстоўваючы `новай '*/сімвал с; пустэча * ру = &c; Int * пі = ру/* невідавочнае пераўтварэнне пустэчы * у цэлае *.Не ў C++ */} Звярніце ўвагу на магчымую памылку выраўноўванне выкліканых невідавочнае пераўтварэнне пустэча * для Int *. Глядзіце C++ альтэрнатыва пустэча * і таНос ().
Пры пераўтварэнні з С у З++, трэба ўлічваць, што C++ мае некалькі ключавых слоў, чым C:
Int класа 2 =/* OK ў С. Сінтаксічная памылка ў C++ */INT віртуальных = 3;/* OK ў С. Сінтаксічная памылка ў C++ */За выключэннем некалькіх прыкладаў, такіх, як тыя, паказана вышэй (і падрабязна пералічаны ў стандарце З++ і ў Дадатку У C++ Programming Language (3rd Edition)), C++ з'яўляецца пашырэннем З (Дадатак B даступная для запампоўкі).
Звярніце ўвагу, што "C" у пунктах вышэй ставіцца да класічнага C і C89.
C++ ня нашчадкам C99, C++ і C99 з'яўляюцца братамі і сёстрамі. C99 замяняе некалькі магчымасцяў раман для C/C++ несумяшчальнасці.
З++ з'яўляецца прамым нашчадкам C, што захоўвае амаль усе З як падмноства.
C++ забяспечвае больш надзейную праверку тыпаў, чым З і непасрэдна падтрымлівае шырокі дыяпазон стыляў праграмавання, чым С. З++ з'яўляецца "лепшай З" у тым сэнсе, што ён падтрымлівае стылі праграмавання ажыццяўляецца з дапамогай C з лепшай праверкай тыпаў і больш пазначэнняў падтрымкі (без страты эфектыўнасці). У тым жа сэнсе, ANSI C з'яўляецца лепшай З, чым у K & R С. Акрамя таго, C++ падтрымлівае абстракцыю дадзеных, аб'ектна-арыентаванае праграмаванне і абагульненае праграмаванне (гл. C++ Programming Language (3-е выданне) "; Дадатак У абмеркаванні праблемы сумяшчальнасці даступны для запампоўкі).Я ніколі не бачыў праграму, якая можа быць выказана лепш у З, чым у C++ (і я не думаю, што такая праграма магла б існаваць - кожны пабудаваць у З мае відавочныя C++ эквівалент).
Тым не менш, існуюць яшчэ некалькі асяроддзяў, у якіх падтрымка C++ настолькі слабая, што ёсць перавага выкарыстання C замест гэтага. Ёсць не ўсё, што многія з тых, хто застаўся, хоць, гл. маю (няпоўны) спіс кампілятараў.Для абмеркавання дызайну C++, уключаючы абмеркаванне яго адносіны з C бачыць Дызайн і эвалюцыя C++.
Звярніце ўвагу, што "C" у пунктах вышэй ставіцца да класічнага C і C89.
C++ ня нашчадкам C99, C++ і C99 з'яўляюцца братамі і сёстрамі. C99 замяняе некалькі магчымасцяў раман для C/C++ несумяшчальнасці. Вось апісанне адрозненняў паміж C+ 98 і C99.
Мой асноўны кропкай з'яўляецца тое, што бягучы C/C++ несумяшчальнасць "няшчасныя выпадкі гісторыі", якія не маюць фундаментальных прычын іх (хоць усе яны "выглядалі як добрая ідэя, у той час" некаторым кампетэнтным і добранамераных чалавек).
C/C++ несумяшчальнасці прадастаўляць ніякіх пераваг у грамадстве ў цэлым, выклікаюць сур'ёзныя праблемы для значнай часткі C/C++ супольнасць, і мог, - з вялікай працай - быць ліквідаваны.Для значна больш падрабязнае выкладанне маіх поглядаў на C/C++ сумяшчальнасць гл серыю артыкулаў я пісаў аб гэтым:
Калі ласка, звярніце ўвагу, што гэтыя працы былі напісаны ў канцы 2001 і пачатку 2002 года, калі яшчэ можна было сабе ўявіць скаардынаваныя дзеянні C і C++ камітэтаў па стандартах вядучых да практычных выніках да канца дзесяцігоддзя.
Гэтага не адбылося.
У той час я лічыў C лепшых сістэм мова праграмавання даступныя.
Гэта было не так відавочна, то (1979) як потым стала, але я павінен быў эксперты, такія як Дэніс Рытчы, Стыў Джонсан, Сэндзі Фрэзер, Грэг Чессон, Дуг Макилрой, а Браян Керниган па калідоры, у якога я мог бы вучыцца і атрымаць зваротную сувязь. Без іх дапамогі і рады, і без C, C++ была б асуджаная на правал.Насуперак чуткам паўтарацца, я ніколі не казаў, што я павінен быў выкарыстаць C, і я не быў ніколі не казаў, каб не выкарыстоўваць С. У самай справе, першы C++ кіраўніцтва вырасла з TROFF крыніца кіраўніцтва С, што Дэніс даў мне.
Многія новыя мовы былі распрацаваны ў Bell Labs, у "Даследаванні" па крайняй меры, не было ніякіх правілаў захавання мову фанатызму.
Існуе не мову, званы "C/C++".
Фраза, як правіла, выкарыстоўваецца людзьмі, якія не маюць паняцця аб праграмаванні (напрыклад, супрацоўнікаў HR-мэнэджараў і беднымі). Акрамя таго, ён выкарыстоўваецца людзьмі, якія простым не ведаю, C++ (і часта не C небудзь). Калі выкарыстоўваецца праграмістамі, гэта звычайна азначае "З++ С з некалькімі карыснымі і мноства бескарысных функцый, дададзеных складаныя" адносіны. Часта, гэта кропка гледжання людзей, якія любяць пісаць свае ўласныя радкі і хэш-табліц з невялікім веданнем стандартнай бібліятэкі за Printf і тетсру. Ёсць людзі, якія прытрымліваюцца абмежаванага падмноства C++ для цалкам важкія прычыны, але яны (наколькі я заўважыў), не людзі, якія кажуць "C/C++".Я выкарыстоўваю C/C++ толькі ў такія фразы, як "C/C++ сумяшчальнасць" і "C/C++ супольнасць".
Цяперашняе вызначэнне C++ з'яўляецца ISO C++ Standardапісана ў C++ Programming Language (3-е выданне).
Вы можаце знайсці больш поўную шкалу і больш падрабязныя тлумачэнні ў Дызайн і эвалюцыя C++і гісторыі C++: 1979-1991.
Канкрэтных задач, якія прымусілі мяне пачаць распрацоўку і ажыццяўленне C++ (першапачаткова называўся "C з класамі") былі звязаны з гандлёвай сеткі аперацыйнай сістэмы па сеткі.
Вы можаце знайсці больш падрабязныя тлумачэнні ў Дызайн і эвалюцыя C++.
Глядзіце таксама Гісторыя C++: 1979-1991і Развіццё мовы ў сабе і для рэальнага свету: C++ 1991-2006 гг.
У той час, калі я распрацоўваў C++ - а да гэтага, калі Кен Томпсан і Дэніс Рытчы распрацаваў Unix і C - AT & T, верагодна, самы вялікі ў свеце грамадзянскі карыстальнік (і спажывец) праграмных сродкаў.
Затым, мы, верагодна, выкарыстоўваліся больш шырокі дыяпазон сістэм - ад драбнюткіх ўбудавальных працэсараў для найбуйнейшых суперкампутараў і сістэм апрацоўкі дадзеных. , Якія ставяць у раздзел кута сістэмы, якія былі дастасавальныя ў многіх тэхнічных культур і на шматлікіх платформах. З і З++ былі распрацаваны з такімі патрабаваннямі на ўвазе.Такім чынам супольнасці мае важнае значэнне, і ўласныя функцыі разглядаюцца як абмяжоўвае выбар платформаў і пастаўшчыкоў.
Як следства AT & T быў і застаецца асноўным прыхільнікам фармальных стандартаў (напрыклад, ISO C і ISO C++).На самай справе, AT & T зарабіў дастаткова грошай на Cfront, мой арыгінальны C++ кампілятар, плаціць за развіццём C++ у некалькі разоў.
Кампілятара пастаўшчыкі не плацяць ганарараў мне, ні AT & T для C++ і ISO стандарты ўяўляюць сабой спецыфікацыі прызначаныя для бязвыплатнае выкарыстанне ўсіх (як толькі яны заплацілі ISO або нацыянальнага стандарту камітэт па сваёй копіі стандарт).
Асобныя кампілятары з'яўляюцца ўласнасцю іх адпаведных вытворцаў/пастаўшчыкоў."Але хто-небудзь з ШАС заявілі, што яны валодаюць C++", з'яўляецца тое, што не так?
Гэта поўная лухта. Я бачыў, што інтэрв'ю. ШАС хлопец відавочна не ведалі, што C++ быў, называючы яго "Сі++". Самае большае, што ШАС можа мець ва ўласнасці 15-гадовая і сур'ёзна састарэлую версію Cfront - мой арыгінальны C++ кампілятар. Я быў дастаткова асцярожны, каб не патэнта або гандлёвай маркі нічога агульнага з C++. Гэта адна з прычын мы пішам просты "C++", а не "C++ (TM)". C++ стандарт Неабцяжараны патэнтаў - камітэт старанна правяраецца, што таксама.
У главе 1 TC++ PL: `` імя C++ (вымаўляецца як "бачыць плюс плюс") было прыдумана Рыкам Mascitti ў летам 1983 года.
Імя азначае эвалюцыйны характар?зменаў З; "++" з'яўляецца аператарам З прыростам. Трохі карацей назву "C+" з'яўляецца сінтаксічнай памылкі, яна таксама выкарыстоўваецца ў якасці імя незвязаных мове. Знаўцы семантыкі З знаходзяць C++ саступае++ C. Мова не называецца D, таму што гэта пашырэнне C, і ён не спрабуе ліквідаваць праблемы, выдаляючы функцыі. Для яшчэ адну інтэрпрэтацыю назвы C++, гл. дадатак да [Оруэла, 1949].''"З" у З++ мае доўгую гісторыю.
Натуральна, гэта назва мовы Дэніс Рытчы распрацаваны. Неадкладнае продка C быў інтэрпрэтаваць нашчадкам BCPL званыя B распрацаваны Кеном Томпсанам. BCPL была распрацавана і рэалізавана Марцін Рычардс з Кембрыджскага універсітэта падчас наведвання Масачусецкім тэхналагічным інстытуце ў Кембрыджы іншыя. BCPL у сваю чаргу, асноўныя CPL, CPL, дзе гэтае імя даволі вялікі (для свайго часу) і элегантны мова праграмавання, распрацаваны сумеснымі высілкамі універсітэтаў Кембрыджа і Лондана. Да Лондана людзі далучыліся да праекту "З" выступае за Кембрыджы. Пазней, "З" афіцыйна выступае за камбінаваны. Неафіцыйна, "З" выступае за Крыстафер таму што Крыстафер Стрэчи быў галоўным ўлада за CPL.''
Cfront быў традыцыйны кампілятар, які зрабіў поўны сінтаксіс і семантычныя праверкі C++ зыходны.
Для гэтага ён поўны сінтаксічны аналізатар, пабудаваны табліцы знакаў, і пабудаваў поўнае ўнутранае прадстаўленне дрэва для кожнага класа, функцыі і г.д. Ён таксама зрабіў некаторыя аптымізацыі ўзроўні зыходнага кода на яго ўнутранае прадстаўленне дрэва C++ канструкцый перад высновай С. версію, якая спароджаны З, не належыць на C для любога тыпу праверкі. Ён проста выкарыстаў З як асэмблер. Атрыманы код быў бескампрамісна хутка. Для атрымання дадатковай інфармацыі гл D & E.
Акрамя таго, C++ падтрымлівае метады праграмавання, які дазваляе кіраванне памяццю, каб быць бяспечным і няяўных без зборшчыка смецця.
C++0 хпрапаноў GC ABI.
Звярніце ўвагу, што прадастаўленне графічнага інтэрфейсу і тэхнічныя і палітычныя праблемы.
Ёсць шмат графічных інтэрфейсаў карыстальніка з вялікай колькасцю карыстальнікаў, ды і наогул яны не хацелі б некаторыя іншыя GUI, які быў абвешчаны стандартам. У любым выпадку, камітэт па стандартах не маюць рэсурсаў для стварэння новых і лепшых GUI.
C++0 хпрапануе тэмы.
Адзін простай рэчы, што бянтэжыць многіх дыскусій выкарыстання мовы/папулярнасць адрозненне паміж адноснай і абсалютнай меры.
Напрыклад, я кажу, што C++ выкарыстоўваць расце, калі я бачу карыстальнік насельніцтва вырасце на 200 тысяч праграмістаў ад 3,1 M да 3.3M. Тым не меней, хто-то можа сцвярджаць, што "C++ памірае", таму што "папулярнасць" знізілася з 16 працэнтаў да 11 працэнтаў ад агульнай колькасці праграмістаў. Абодва патрабаванні могуць быць адначасова праўдзівымі, як лік праграмістаў, працягвае расці і, асабліва, як тое, што лічыцца праграмавання працягвае змяняцца. Я думаю, што З++ з'яўляецца больш праводзіць сваю ўласную ў сваёй традыцыйнай вобласці ядра, такіх як інфраструктура, сістэмы праграмавання, убудаваных сістэм і прыкладанняў з сур'ёзнымі часу і/або прасторавых абмежаванняў. Глядзіце таксама маю DevX інтэрв'ю.
ISO C++ стандартнаябыла ратыфікавана ў 1998 годзе.
Наступная версія, па мянушцы C++0 х, з'яўляецца поўным і грамадскага разгляду, пасля чаго адбываецца "proofeading прайсці", і працэс ратыфікацыі. Вы можаце знайсці артыкулаў, якія апісваюць C++0 х на маю старонку публікацый і ўсе дакументы, звязаныя з новым стандартам па ISO C++ старонак камітэта дома. Мой HOPL-III паперына апошнія 15 гадоў C++ эвалюцыя можа лепшае тлумачэнне таго, што робіцца і чаму. Нядаўнім інтэрв'ю змяшчае спіс новых магчымасцяў мовы і стандартныя бібліятэкі.Пры разглядзе эвалюцыі C++, не варта забываць, што мэта складаецца ў тым, каб не дадаць вялікая колькасць новых функцый, але і палепшыць C++ для сваіх ключавых галінах прыкладанняў, уключаючы сістэмы праграмавання і будынак бібліятэкі, не парушаючы старога кода (Ёсць мільярды радкоў C++ "там").
З 1987 года або каля таго, Цэнтр развіцця мовы З++ і звязаныя з ёй стылі праграмавання было выкарыстанне шаблонаў, статычны палімарфізм, абагульненае праграмаванне і Мультипарадигмальное праграмавання.
Гэта спосаб выходзіць за рамкі гэтак разадзьмутымі ўласныя мовы. Яшчэ адно важнае адрозненне ў тым, што C++ падтрымлівае карыстацкія тыпы ў той жа ступені, як ўбудаваныя тыпы. Гэта - асабліва ў спалучэнні з выкарыстаннем шаблонаў, канструктары і деструкторы - дазваляе C++ праграмістам, каб выкарыстоўваць праграмаванне і дызайн метады, якія (ИМО) з'яўляюцца больш прасунутымі, чым падтрымліваецца ў мовах, з якім C++ з'яўляецца найбольш часта параўноўваюць, напрыклад, гл RTTI.Standard C++ і дызайн і праграмаванне стыляў ён падтрымлівае ў даўгу перад функцыянальных моў, асабліва ў ML.
Раннія варыянты механізмаў ML-тып выліку былі (разам з шматлікім іншым) частка натхнення шаблонаў. Некаторыя з найбольш эфектыўных метадаў функцыянальнага праграмавання былі часткай натхнення STL і выкарыстанне функцыі аб'ектаў у C++. З іншага боку, функцыянальнае супольнасць прапусціў лодку з аб'ектна-арыентаваным праграмаваннем, і нешматлікія з моў і інструментаў гэтага таварыства выгаду ад паспявання вопыт буйнамаштабнага прамысловага выкарыстання.Відавочна, я не думаю, што збор смеццяз'яўляецца адзінай вызначальнай характарыстыкай "прасунутых" у кантэксце моў праграмавання.
У прыватнасці, звернеце ўвагу, што C++ забяспечвае падтрымку для эфектыўнага і выніковага кіравання памяццю, якія могуць ліквідаваць уцечкі рэсурсаў без выкарыстання зборшчыка смецця. Калі вы не згодныя, вы можаце проста пачаць выкарыстоўваць зборшчык смецця для C++; Ёсць добрыя даступныя.
несапраўдным draw_all (вектар <Форма *> і супраць)//малюем кожны элемент стандартнага вектара {for_each (vs.begin (), vs.end (), mem_fun (і Форма:: маляваць));}Тут, форма будзе абстрактны базавы клас, які вызначае інтэрфейс для іерархіі геаметрычных фігур. Гэты прыклад лёгка абагульняецца на любым стандартным кантэйнеры бібліятэкі:
шаблон <клас C> пустэча draw_all (C & CS)//малюем кожны элемент стандартнага кантэйнера {for_each (cs.begin (), cs.end (), mem_fun (і Форма:: маляваць));}
Кніга Джыма Coplien ў "Мультипарадигмальное Дызайн для C++" (Addison Wesley, 1998) даследуе выкарыстанне некалькіх парадыгмаў у кантэксце распрацоўкі і метады праектавання.
C++ стандарт 740 старонак, але, што ўключае ў сябе 400 старонак бібліятэка апісанняў.
Моўныя асаблівасці апісаны (у драбнюткіх дэталях) у 340 старонак. Акрамя таго, ТК++ PLскладае 1000 старонак+, але толькі 350 з тых, прысвечаны тлумачэнню моўных сродкаў і іх выкарыстанне; астатняе абмяркоўваць бібліятэкі, метады праграмавання і г.д.C++ непасрэдна падтрымлівае (гэта значыць у мове), што некаторыя іншыя падтрымку моў з дапамогай бібліятэк, так што частка мовы будзе адносна вялікім.
З іншага боку, калі вы хочаце напісаць "тыповых сучасных прыкладанняў", якія неабходна ўлічваць аперацыйнай сістэмы інтэрфейсы, GUI, баз дадзеных, вэб-інтэрфейсаў і г.д. Сума магчымасці мовы, бібліятэкі і праграмавання канвенцыямі і стандартамі, што вы павінны азнаёміцца?з карлікам мовы праграмавання. Тут C++ 'ы памер можа быць перавагай, паколькі яна лепш падтрымлівае добрыя бібліятэкі.Нарэшце, дні, калі пачатковец праграміст можа ведаць усіх моў зніклі, па меншай меры на тых мовах, на шырокае прамысловае выкарыстанне.
Мала хто ведае "усё З" ці "усё Java", альбо, і ніхто з іх з'яўляюцца пачаткоўцамі. Адсюль вынікае, што ніхто не павінен прасіць прабачэння за тое, што пачаткоўцы не ведаю, усё C++. Тое, што вы павінны зрабіць - на любой мове - гэта абраць падмноства, атрымаць працу напісання кода, і паступова даведацца больш пра мову, яго бібліятэкі, і яго інструментаў. За маё прапанову аб тым, як пачаткоўцы могуць падыходзіць C++, гл Праграмаванне: прынцыпы і практыка выкарыстання C++.
Для абмеркавання таго, як убудаваныя сістэмы распрацоўнікі могуць вырашэння праблем прадукцыйнасці з выкарыстаннем стандартных C++ (лепш, чым з дапамогай дыялекту) см. ISO C++ камітэта справаздачу аб дзейнасці.
Наколькі мне вядома, EC++ мёртвы (2004), і калі гэта не так павінна быць.Для паглядзім, як ISO C++ могуць быць выкарыстаны для сур'ёзнага праграмавання ўбудаваных сістэм, гл аўтамабіля JSF паветра C++, стандарты кадавання.
Тым не менш, пісаць у стылі З праграмамі на З++ для большасці прыкладанняў, не аптымальнае выкарыстанне C++.
Каб быць сапраўды эфектыўнымі C++ праграміст, вы павінны выкарыстоўваць абстракцыі і механізмы тыпу сістэмы такім чынам, які адпавядае разумна з іх намерам. Спробы ігнараваць ці паражэнне C++ тып сістэмы з'яўляецца найбольш гняце.Напісанне Java-кода ў стылі З++ можа быць расчараванне і неаптымальнай, як напісанне C-код у стылі C++.
Для больш дэталёвага абмеркавання гл. любы з маіх агляд або стыль артыкулаў з маёй бібліяграфіі.
У прыватнасці, гл маю OOPSLA паперы "Чаму C++ не толькі аб'ектна-арыентаваная мова праграмавання".
"У C++, ёсць нашмат менш і чысцей мовы з усіх сіл спрабуе выбрацца з".
Так, гэта цытаты можна знайсці на старонцы 207 Дызайн і эвалюцыя C++. І няма, што больш дробныя і больш чыстага мовы не Java або C #. Цытата адбываецца ў раздзеле "Файлы і Beyond Сінтаксіс". Я паказваў на тое, што C++ семантыка нашмат чысцей, чым яго сінтаксіс. Я думаў пра стылях праграмавання, бібліятэк і асяроддзя праграмавання, які падкрэсліў, больш чыстых і эфектыўных метадаў больш архаічныя выкарыстоўвае сканцэнтраваны на нізкаўзроўневыя аспекты C."Я заўсёды жадаў мой кампутар, каб быць максімальна простым у выкарыстанні, як мой тэлефон; маё жаданне збылося, таму што я больш не могуць зразумець, як выкарыстоўваць свой?тэлефон".
Я сказаў, што пасля расчараванняў спробы выкарыстоўваць "шматфункцыянальных" тэлефон-то каля 1990 года. Я ўпэўнены, што настроі не быў арыгінальны, і, верагодна, нават не агульная фармулёўка, хто-то павінна быць, думаў аб тым, што перада мной."Ёсць толькі два тыпу моў: тыя людзі скардзяцца і тыя, ніхто не выкарыстоўвае".
Так. Зноў жа, я вельмі сумняваюся, што настроі арыгінала. Вядома, усе "Ёсць толькі два" двукоссі павінны быць прыняты з недаверам."Доказ па аналогіі махлярства".
Так, старонка 692 ТК++ PL. Добрай аналогіяй з'яўляецца выдатным спосабам ілюстраваць ідэю, але занадта часта падобныя аналогіі не суправаджаюцца цвёрдай аргументацыі, дадзеных і г.д."Людзі, якія думаюць, што ведаюць усё на самай справе раздражняюць тых з нас, хто ведаюць, што мы не".
Так."C++ гэта мой любімы смецце мову, таму што ён генеруе вельмі мала смецця".
Так, гл Чаму не C++ ёсць зборка смецця?і Як спраўляцца з уцечкамі памяці."Калі вы думаеце, гэта проста, то вы не зразумелі праблему".
Так, але не, я не памятаю, якое пытанне выклікаў такі адказ."Ёсць больш карысныя сістэмы, распрацаваныя на мовах лічыцца жахлівым, чым у мовах хвалілі за тое, што хораша - шмат больш".
Так, у Масачусецкім тэхналагічным інстытуце інтэрв'ю Агляд тэхналогій і ў іншых месцах. Там я таксама сказаў:Занадта часта "камп'ютэрныя навукі" з'яўляецца адной з формаў матэматыцы зайздрасці.
Так, але, калі ласка, не забывайце, што "занадта часта". Цытата з кантэксту, у якім я турбавацца аб недастатковай увазе да дадзеных (эмпірызм) і недастатковая ўвага да сувязі да кампутараў. Гэта не франтальнае наступ на тым, што інфарматыка можа быць навукай (гл., напрыклад, Пуга на алгарытмы і аналіз алгарытмаў; гэта навука, і гэта не любая іншая навука). І, не, я не збіраюся даваць канкрэтныя прыклады і імёны.Занадта часта "праграмнага забеспячэння" не з'яўляецца ні інжынерных, ні аб праграмным забеспячэнні.
Так, але, калі ласка, не забывайце, што "занадта часта". Цытата з кантэксту, у якім я турбавацца аб недастатковай увазе да дадзеных (эмпірызм) і недастатковая ўвага да сувязі ў кодзе. Я баюся, што рэаліямі таго, каб даставіць карысны і ў суправаджэнні код можа быць патоплены ў працэсах, карпаратыўных стандартаў, і маркетынгавыя даследаванні, што распрацоўка праграмнага забеспячэння часам знаходзіцца пад кантролем людзей, якія не маглі распазнаць добры код, калі ён ускочыў і ўдарыў ім на носе, і ганарымся гэтым. І, не, я не збіраюся даваць канкрэтныя прыклады і імёны. Калі па добраму, распрацоўка праграмнага забеспячэння з'яўляецца годным дысцыпліны інжынернай, забяспечваючы вынікі, якія параўноўваюцца з пунктам гледжання старэй інжынерных дысцыплін.Калі (не калі) аўтаматычны збор смецця становіцца часткай C++, гэта будзе дадатковым.
Ды ў 2000 інтэрв'ю з/..Лёгка выйграць прабачэння за тое, што няправільна, а калі іх права гэта тое, што вы ў рэальныя непрыемнасці. Так.
Любая праблема ў вобласці кампутарнай навукі могуць быць вырашаны з іншы ўзровень ўскоснага, вядомы як першы закон вылічэнняў.
Так, я сказаў, што цытаванні (маёй доктарскай дысертацыі advison) Дэвід Дж. Уілерам. Калі ласка, не misattribute яго мне.
Вядома, няма.
Прачытайце рэальныя інтэрв'ю IEEE.
C++ быў першапачаткова распрацаваны і рэалізаваны ў выглядзе набору агульных сродкаў вырашэння некаторых канкрэтных праблем, якія я і мае калегі сутыкнуліся.
Супольнасці - і эфектыўнасць - са сродкаў, якія прадстаўляюцца апынулася служыць значна шырэй патрэбаў, чым я чакаў. Акцэнт на агульных аб'ектаў - у адрозненне ад прадастаўлення канкрэтных рашэнняў канкрэтных праблем - засталася з C++ і служыў свайго супольнасці і канкрэтных праблем, якія стаяць перад супольнасцю змяніліся за гэтыя гады.
Сур'ёзна, я шукаю фундаментальныя шляхі ўдасканалення сродкаў і метадаў, якія мы выкарыстоўваем для пабудовы вялікіх рэальных сістэм.
Адна частка маёй працы складаецца ў C++0 х.
Паглядзіце на мае дакументы для HOPL-2і HOPL-3; HOPL расшыфроўваецца як "Гісторыя Мовы праграмавання", прэм'ер-міністр канферэнцыі па гэтым пытанні, аўтарам якога ACM.
Гэта моцна рэцэнзуюцца прац. Для яшчэ больш падрабязна гл маю кнігу Дызайн і эвалюцыя C++і прадмову да 2006 Японская пераклад D & E , які прыносіць інфармацыю да 2006 года. Акрамя таго, многія з маіх інтэрв'ю закрануты пытанні фон, дызайн, гісторыя C++.
Павышэнне бібліятэкі тэстаў люксаў, ёсць дакументацыя, былі пратэставаныя на некалькіх кампутарах, і рэцэнзаванне.
У мяне дзве праблемы з Boost, хоць, які, спадзяюся, будуць разгледжаны ў канцы канцоў:
Як і ўсе магутныя метады яны лёгка злоўжываць.
Асабіста я аддаю перавагу выкарыстоўваць шаблоны ў першую чаргу для абагульненага праграмавання (напрыклад, у вызначэнні кантэйнераў і алгарытмаў над кантэйнерамі) і шаблоны, якія генеруюць досыць відавочныя код, заснаваны на шаблоне аргументаў (напрыклад, стварэнне буфераў і зарэгістраваць код доступу), што часам называюць генератыўнай праграмавання. Будзьце асцярожныя складанасці шаблонаў вы пішаце або выкарыстання; лёгка атрымаць overenthusiastic і пісаць код шаблону, які з'яўляецца занадта разумны, каб быць карысным у якасці падтрымоўванага кода вытворчасці.Калі вам не падабаецца функцыянальных стыляў праграмавання, вы можаце знайсці шаблон метапрограммы цяжка зразумець.
Калі вы, як функцыянальнае праграмаванне, вы можаце знайсці шаблон версіі крыху прымітыўна, але памятайце, гэтыя шаблоны выконваюцца падчас кампіляцыі.