Это вопросы, которые люди спрашивают меня часто. Если у вас есть лучшие вопросы или комментарии на ответы, не стесняйтесь, напишите мне bs@research.att.com. Пожалуйста, помните, что я не могу тратить все свое время улучшить свои домашние страницы.
Эта страница концентрируется на личное мнение и общие вопросы, связанные с философией. По вопросам, которые более непосредственно связанные с C + +, языковые особенности и использование C + + см. в моей C + + стиль и технику FAQ. Для C + + терминологии и понятий, см. мой C + + глоссарий. Для ссылки на полезные источники C + + сведения см. в моей C + +, старонкаи моей C + +0 х FAQ. Для получения информации о моих книг (в том числе обзоры и информационной поддержки), см. мою книгу список. Для документов и номера ISBN для переводов из моих книг, см. мою публикацию списка.
Содержание
1. Общий
2. Изучение C + +
3. Стандартизация
4. Книги
5. Другие языки
6. С и С + +
7. История C + +
8. И т.д. С + + вопросы
9. Личные
Общее
1. Что хорошего о классах?
2. Что такое “ООП” и что это так здорово по этому поводу?
3. Что такое “родовое программирование”, а что хорошего в этом?
4. Что такое C + +?
5. Почему C + + позволяет опасного кода?
6. Что такое “Мультипарадигмальное программирования”?
7. Является ли C + + в упадке?
8. Что делается для улучшения C + +?
9. Правда ли, что …?
Изучение C + +:
1. Что такое лучшая книга учиться C + + с?
2. Сколько времени нужно для того, чтобы узнать C + +?
3. Зная С является необходимым условием для обучения C + +, не так ли?
4. Если я узнаю, чистый язык ОО к C + +, чтобы стать настоящим программистом OO?
5. Как мне начать изучать C + +?
6. Будете ли вы помочь мне с моей домашней работы?
7. Где я могу получить бесплатный компилятор С + +?
8. Какой самый лучший способ улучшить свой C + + программы?
9. Имеет ли значение, какой язык программирования я могу использовать?
10. Где я могу узнать историю C + +?
Стандартизация:
1. Разве ANSI / ISO стандарты комитета испортить C + +?
2. Если у нас будет стандарте С + +?
3. Где я могу получить машиночитаемую версию стандарта?
4. Есть ли какие-либо функции вы хотите удалить из C + +?
5. Почему нет C + + есть сборка мусора?
6. Почему нет C + + есть GUI?
7. Почему нет C + + темы поддержки?
8. В чем разница между C + 98 и 03 C +?
9. Что будет C + +0 х выглядеть?
Книги:
1. Если у нас будет новый ARM?
2. Если вы будете публиковать 4-е издание “C + + Язык программирования”?
3. Стоит ли покупать “Special Edition” с “C + + Язык программирования”?
4. Где я могу найти свободный машиночитаемый копии ваших книг?
5. В чем разница между “TC + + PL” и “Программирование” книги?
Другие языки:
1. Является Java язык, который разработали, если Вы не должны быть совместимы с C?
2. Что вы думаете о C #?
3. Что вы думаете о C + + / CLI?
4. Что вы думаете о EC + +?
5. C + + получил свое объектно-ориентированной концепции с Smalltalk?
6. Вы действительно рекомендую Ада над C + + для больших проектов?
7. Вы бы сравнить C + + для “какого-либо языка”?
8. Другие делают сравнить их языков C + +, разве это не раздражают?
9. Вы не будете сравнивать C + + для других языков, но вы пишете обличительный речи о C + +?
10. Как наследие язык, как C + + конкурировать с современным, современные языки?
11. Почему вы так заинтересованы в мобильности?
С и С + +:
1. C лучше, чем С + + для небольших проектов, не так?
2. Является ли C подмножество C + +?
3. В чем разница между С и C + +?
4. Вы действительно думаете, что С и С + +, могут быть объединены в единый язык?
5. Что вы думаете о C / C + +?
6. Почему код, сгенерированный для “Привет мир” программы в десять раз больше для C + +, чем для C?
7. Почему вы сделали C + + (почти), совместимые с C?
История C + +:
1. Если C + + придумал?
2. Почему вы изобретать C + +?
3. Почему AT & T поддержки развития C + +?
4. У вас есть C + +?
5. Откуда название “C + +” берутся?
6. На каком языке вы использовали для написания C + +?
И т.д. С + + вопросы:
1. Почему C + + такой большой?
2. Является ли C + + объектно-ориентированного языка?
3. Что такое “унаследованный код”?
4. Является ли количество C + + пользователи по-прежнему удваивается каждый год?
5. Кто-нибудь использовать C + +, в эти дни?
6. Почему нет C + + для операционных систем?
7. Что вы думаете о Boost?
8. Что вы думаете о шаблонного метапрограммирование?
9. Вы ожидали, C + +, чтобы стать такой успех?
10. Что такое хорошая сертификации для программистов С + +?
11. Какой компилятор С + + вы рекомендуете? Какие библиотеки?
Личные:
1. Как вы произносите “Бьерн Страуструп”?
2. Могу я задать вам вопрос?
3. Почему бы вам не ответит на ваши электронной почте?
4. Почему бы вам не сделать свой сайт выглядят современно?
5. Является ли “Бьерн” самозванцем?
6. Вы шведской?
7. Неужели вы так говорите?
8. Действительно ли вы дать интервью IEEE?
9. Что вы сейчас работаете?
Как вы произносите “Бьерн Страуструп”?
Это может быть трудным для не-скандинавов. Лучшее предложение я слышал, еще не было “начать с того, он несколько раз на норвежском языке, то материал картофеля в горло и сделать это еще раз
” Вот файл WAV.
Для людей, которые не могут получить звук, вот предложение: Оба моих имена произносятся с двух складов: Bjar-пе-Strou strup. Ни, ни BJ в моих первых имен и подчеркнул М. довольно слабая так что, возможно Бе-ар-NEH или По-ар-пе даст идею. У первого в моей фамилии на самом деле должно было быть V делающий первый состав конца далеко вниз по горло: Strov-strup. У второго чем-то напоминает OO в ООП, но все же коротко, может быть, Strov-струпа даст идею.
Да, это, вероятно, наиболее часто задаваемый вопрос
PS Мой первый зовут Бьорн – нет Бьорн (не имя), Бьерн (связанных, но другое имя), ни Барни (не связанные имя). Мое второе имя Страуструп – нет Stroustroup, Stroustrop, Strustrup, Strustrop, Strustroup, Straustrup, ни Straustroup (документы, используя каждый из этих опечатками можно найти с помощью Google).
Могу я задать вам вопрос?
Конечно. Я постараюсь ответить на мою электронную почту. Однако, пожалуйста, постарайтесь не задавать вопрос, на который ответил на мой домашних страниц. Также, пожалуйста, не полагайтесь на оперативный ответ. Я получаю шмат листов.
Ниже приведены ссылки на
биографические данные
C + + информация и ссылки
работ (в том числе немногих, который может быть загружен)
книг (в том числе обзоры, список известных ошибок, и несколько глав, которые можно загрузить)
Интервью
Почему бы вам не ответит на ваши электронной почте?
Я делаю, но я получаю много электронной почты. Я считаю, что я отвечаю на более чем 95% (не спам) сообщений я получаю. Тем не менее, иногда я получаю переполнены. Некоторые сообщения были утеряны в мой почтовый ящик, некоторые из них задерживается пока я не могу найти время, некоторые из них задерживается, пока я не находил время для ответа набор сообщений, связанных с (это часто бывает на комментарии о потенциальных ошибках в моих книгах) . К сожалению, более длинные и вдумчивые сообщения больше шансов получить задержкой, чем просто те, которые имеют простых ответов.
Также, если вы напишите мне, пожалуйста, постарайтесь убедиться, что я могу ответить вам. Я действительно ненавижу, когда я написал и отправил ответ, только чтобы обнаружить, что обратный адрес является недействительным или недоступны.
Два вида сообщения имеют значительно больше шансов заблудиться: домашнее задание вопросов и вопросов в форме “как я могу использовать эту собственность библиотеку?”. Я немного скучно не отвечает последним вопросам, потому что часто человек просит не понимает, что DOS, Windows, или любой другой интерфейс C + + не входит в стандарт С + + (и я не в состоянии угнаться за большим количеством C + + библиотеки). Если вы не получили ответа, пожалуйста, рассмотреть, если ваш вопрос был одной из этих видов.
Кроме того, если Вы даете свою фамилию, и я теперь, вероятно, чтобы удалить сообщение прочитано. Это новая политика. Я никогда не был большим поклонником псевдонимами, но я считаю, что шанс на вежливое технических разговор с человеком, который думает, что это прохладно, чтобы спрятаться за имя, как suuupergeeek или coolGuy3 становится слишком низкой для меня беспокоят попытки.
Почему бы вам не сделать свой сайт выглядят современно?
Я “содержимое провайдер« не веб-сайт дизайнера. Я могу использовать свое время, чтобы улучшить содержание и внешний вид, но не одновременно.
То, что выглядит “круто и современной” кому-то часто считается дурным вкусом кем-то другим, а мода быстро меняться. Кроме того, очень простой HTML загружает и отображает быстрее, чем все остальное, и многие люди все еще страдают от медленных соединениях Интернета.
Является ли “Бьерн” самозванцем?
Наверное, нет. Большинство групп новостей, интервью и т.д., которые приходят от меня приходят от меня. Очевидным исключением является печально известный IEEE «интервью», который я нахожу довольно несмешной. Я, как известно, для отправки сообщений в группы новостей от моего аккаунта Gmail, где мой пользовательский идентификатор “Бьерн”, как-то, который, кажется, смущает некоторых людей. Если вы сомневаетесь, подумайте стиль и содержание подозреваемого сообщение, проверьте другие сообщения в форуме, или спросить.
Что же такого хорошего в классы?
Занятия там, чтобы помочь вам организовать ваш код и рассуждать о своих программах. Вы могли бы примерно сказать, что эквивалентно классы существуют, чтобы помочь вам избежать ошибок и, чтобы помочь вам найти ошибки после того, вы делаете ошибку. Таким образом, классы значительно помогает обслуживания.
Класс представления идеи, концепции, в коде. Объект класса представляет конкретный пример идеи в коде. Без классов, читатель кода бы догадаться об отношениях между элементами данных и функции – классы делают таких отношений явных и “понял” компилятора. С классов, более высокого уровня, структуры вашей программы, представленные в коде, а не только в комментариях.
Хорошо разработанный класс представляет простой и понятный интерфейс для своих пользователей, скрывая свое представительство и сохранение своих пользователей от необходимости знать об этом представление. Если представление не должно быть скрыто – например, потому, что пользователи должны иметь возможность изменить любой элемент данных так, как им нравится – вы можете думать о том, что класс как “просто обычная старая структура данных”, например:
Обратите внимание, что даже эти структуры могут извлечь выгоду из вспомогательных функций, таких как конструкторы.
При проектировании класса, часто бывает полезно рассмотреть, что это верно для каждого объекта класса и во все времена. Такое свойство называется инвариантной. Например, инвариантов вектора может быть, что его представление состоит из указателя на число элементов и, что количество элементов хранится в целое число. Это работа каждого конструктора для создания класса инвариант, таким образом, чтобы каждый член функция может полагаться на него. Каждый член функция должна оставлять инвариантной силу с момента выхода. Такое мышление особенно полезно для классов, которые управляют ресурсами, таких как замки, розетки и другие файлы. Например, класс дескриптор файла будет инвариантной, что он содержит указатель на открытый файл. Конструктор дескриптор файла открывает файл. Деструктор свободных ресурсов, приобретенных конструкторов. Например, деструктор дескриптор файла закрывает файл, открытый в конструкторе:
Если вы еще не запрограммированы с классами, Вы найдете части этого объяснения непонятных и вы будете недооценивать полезность классов. Посмотрите на примеры. Как и все хорошие учебники, TC + + PLмае множество примеров, см., например, Тур стандартной библиотеки. Большинство современных C + + библиотеки состоят (кроме всего прочего) классов и библиотек учебник является одним из лучших мест, чтобы найти примеры полезных классов.
Что такое “ООП” и что это так здорово по этому поводу?
Есть много определений “объектно-ориентированным”, “объектно-ориентированное программирование” и “объектно-ориентированных языков программирования”. Для долгие объяснения того, что я называю “объектно-ориентированным”, читайте Почему C + + не только объектно-ориентированный язык программирования. Тем не менее, объектно-ориентированного программирования является стиль программирования, происходящих из Simula (около 40 лет назад!), Опираясь инкапсуляции, наследования и полиморфизма. В контексте C + + (и многих других языках с их корнями в Simula), это означает, программирование с использованием иерархии классов и виртуальных функций, которые позволяют манипуляции объектами различных типов через четко определенные интерфейсы и позволяют программе быть продлен постепенно через вывод.
Смотрите Что хорошего о классах? за идею о том, что большое о “простых классов”. Дело об организации классов в иерархии классов заключается в выражении иерархические отношения между классами и использовать эти отношения для упрощения кода.
Чтобы действительно понять ООП, искать какие-то примеры. Например, у вас может быть две (или более) драйверов устройств с общим интерфейсом:
Этот драйвер просто интерфейс. Она определяется без вести членов и множество чистых виртуальных функций. Драйвер может быть использована через этот интерфейс и много разных видов водители могут реализовывать этот интерфейс:
Обратите внимание, что эти драйверы хранения данных (государственной) и объектов, из них не может быть создан. Они реализуют функции, определенные в драйвер. Мы можем представить себе используемого драйвера вроде этого:
Ключевым моментом здесь является то, что F () не нужно знать, какой тип драйвера он использует: все, что нужно знать, что он передается драйвера, то есть интерфейс к различным видам водителей. Мы могли бы ссылаться е () следующим образом:
Заметим, что при F () использует драйвер правильный вид операции неявно выбран во время выполнения. Например, если F () передается d1, d.read () использует Driver1: читать (), в то время, когда F () передается d2, d.read () использует Driver2: читать (). Это иногда называют время отправки или динамической диспетчеризации. В этом случае нет никакой возможности, что F () мог знать тип устройства она называется, потому что мы выбирают ее, основываясь на входе.
Пожалуйста, обратите внимание, что объектно-ориентированное программирование не является панацеей. “ООП” означает не просто “хорошо” – если Есть нет свойственного иерархические связи между основными понятиями в вашей проблемы, то никакое количество иерархии и виртуальных функций улучшить ваш код. Сила ООП, что Есть много проблем, которые могут быть с пользой выражается с помощью иерархии классов – главная слабость ООП является то, что слишком много людей пытаются заставить слишком много проблем в иерархической форме. Не каждая программа должна быть объектно-ориентированным. В качестве альтернативы, рассмотрим простой классов, обобщенного программирования, и свободно стоящие функции (как в математике, С и Fortran).
Что такое “родовое программирование”, а что хорошего в этом?
Generic программирование программирования на базе параметризации: Вы можете параметризации типа с другом (например, вектор с типами элементов) и алгоритм с другом (например, функция сортировки с функцией сравнения). Цель обобщенного программирования является обобщение полезную структуру алгоритм или данные для наиболее общей и полезной форме. Например, вектор целых чисел в порядке, и так это функция, которая находит наибольшее значение в вектор целых чисел. Тем не менее, общее решение, которое обеспечивает вектор любого типа пользователь захочет использовать и функцию, которая находит наибольшее значение в любой вектор, еще лучше:
Эти примеры взяты из STL (контейнеры и алгоритмы часть ISO C + + стандартная библиотека), для краткого введения, см. Тур стандартной библиятэкиад TC + + PL.
Обобщенное программирование является в определенном смысле более гибкие, чем объектно-ориентированного программирования. В частности, он не зависит от иерархии. Например, нет иерархических отношений между Int и строки. Обобщенное программирование как правило, более структурированы, чем ООП, на самом деле, общий термин, используемый для описания обобщенного программирования является “параметрический полиморфизм”, с “Специальная полиморфизм” быть соответствующий срок для объектно-ориентированного программирования. В контексте C + +, обобщенное программирование решает все имена на этапе компиляции, оно не связано с динамической (во время выполнения) отправки. Это привело обобщенного программирования, чтобы стать доминирующим в районах, где во время выполнения имеет важное значение.
Обратите внимание, что обобщенное программирование не является панацеей. Есть много частей программы, которые не нуждаются в параметризации и много примеров, когда во время отправки (ООП) не требуется.
Почему C + + позволяет опасного кода?
То есть, почему C + +, поддержка операций, которые могут быть использованы для нарушают правила статической (во время компиляции) типа безопасности?
для доступа к аппаратным непосредственно (например, для лечения целого как указатель на (адрес) устройства регистре)
для достижения оптимального выполнения времени и пространстве показателей (например, бесконтрольный доступ к элементам массива и доступ неотмеченным, чтобы объект через указатель)
для обеспечения совместимости с C
Тем не менее, это хорошая идея, чтобы избежать опасного кода, как от чумы, если вы на самом деле не нужна одна из этих трех функций:
не использовать приведения
хранить массивы из интерфейсов (скрыть их в внутренностей высокопроизводительных функций и классов, где они необходимы и писать остальной части программы с помощью надлежащей строки, векторы и т.д.)
избежать недействительным * (держать их внутри функции низкого уровня и структуры данных, если они вам действительно нужны и этого типизированных интерфейсами, как правило, шаблоны, для пользователей)
избегать союзов
если у вас есть какие-либо сомнения по поводу правильности указателей, использование смарт-указатель, вместо этого,
не использовать “голый” новости и удаляет (использование контейнеров, ресурс ручки и т.д., вместо этого)
не используйте … – стиль переменным числом функций (“Printf стиля”)
Избегайте макрасавexcpt для охранников включают
Почти все C + + кода могут следовать этим простым правилам. Пожалуйста, не смущает тот факт, что вы не можете следовать этим правилам, если вы пишете код C или C-код в стиле C + +.
Что такое лучшая книга учиться C + + с?
Существует не одна книга, которая лучше всего подходит для каждого человека. Там не могло быть. Люди слишком разные, в том, как они учатся, в том, что они уже знают, в чем они нуждаются, в том, что они хотят, и в которой усилия, которые они готовы сделать. Есть немало замечательных книг по С + +. Посмотрите Акку (Ассоциации C и C + + пользователей) сайта. Это одно из лучших мест для книжных рекомендаций опытных программистов, которые не боятся выражать свои мысли (книготорговцев, как правило, дают розовые обзоры и отзывы в форме “Эта книга является совершенным, я люблю его, я прочитал почти трех главах и не могу ждать, чтобы узнать больше “хуже, чем бесполезно – почему кто-то за советом о том, как научиться C + + от того, кто совершенно не хватает C + +, опыт бьет меня). ACCU ставки книг для уровня опыта требуется, и общее качество.
Для людей, которые не запрограммирован до или приходят из другого языка и хотят относительно пологий введение в современном C + +, рассмотрим Программирование: принципы и практика использования C + +. Это книга, которую я написал для начинающих (первый год студенты) программирования класса и он выиграл от трех лет использования в классе.
Для людей, которые программисты и желает, чтобы узнать новые концепции и приемы из классического учебника, я рекомендую, C + + Programming Language (3-е издание). Гл. заметку о структуре, содержанию и целям “C + + Programming Language (3-е издание)” Книга предназначена для программистов с некоторым опытом и хотите освоить C + +. Она не направлена на не-программистов, пытаясь узнать их первый язык программирования или случайного программисты пытаются получить поверхностное представление о C + + как можно быстрее. Таким образом, эта книга посвящена концепции и методы, и выходить на который боли быть полными и точными. В нем описывается “чистый С + +”, то есть язык, независимо от какой-либо среде разработки программного обеспечения или фонд библиотеки (кроме стандартной библиотеки, конечно).
Если вы хотите знать, почему C + +, так оно и есть, посмотрите на Дизайн и эволюция C + + (D & E). Понимание проектных критериев и ограничений помогает лучше письменно программ.
Сколько времени нужно для того, чтобы узнать C + +?
Это зависит от того, что вы подразумеваете под “обучения”. Если вы программист C вы можете узнать достаточно, C + +, чтобы сделать вас более эффективными в C-стиле программирования в день.
На TAMU, мы используем Программирование: принципы и практика использования C + +, чтобы получить первокурсников (1-й курс) по основам C + + и методы программирования он поддерживает (в частности, объектно-ориентированное праграмаваннеи обобщенное программирование) в семестр.
С другой стороны, если вы хотите быть полностью удовлетворяет все основные C + + языковые конструкции, из абстракции данных, объектно-ориентированное программирование, обобщенное программирование, объектно-ориентированного дизайна и т.д., вы можете легко потратить год или два – если Вы еще не знакомы с теми методами (скажем, от Java или C #).
Это то время, которое требуется, чтобы узнать C + +? Может быть, но опять же, то есть сроки, мы должны рассмотреть, чтобы стать лучше дизайнерами и программистами. Если драматические изменения, как мы работаем и думаем о построении систем не является нашей целью, то зачем изучать новый язык? По сравнению с Время, необходимое, чтобы научиться играть на фортепиано или стать свободно говорит на иностранных (естественного) языка, обучение новых и различных языков программирования и программирования стиль легко.
Для большего количества наблюдений об изучении C + + см. D & Eабо записку от comp.lang.c + +, который я написал некоторое время назад.
Зная С является необходимым условием для обучения C + +, не так ли?
Неправильно. Общий набор С и С + + легче учиться, чем С. Там будет меньше ошибок типов поймать вручную (C + + тип системы является более жестким и более четким), меньшее количество трюков, чтобы узнать (C + + позволяет вам проявлять больше вещей, без обиняков ), а лучше библиотек. Лучшее начальное подмножество C + +, чтобы узнать, не “все С”.
Смотрите обучения Standard C + + как нового языка для обсуждения выбор C + + конструкций, методов и библиотек для обучения в раннем возрасте. Для примера книг, которые принимает этот подход систематически гл. Страуструпа: Программирование: принципы и практика использования C + + и Koenig & Му: “Ускоренное C + +” от Addison Wesley в C + + In Depthсерыи.
Если я узнаю, чистый язык ОО к C + +, чтобы стать настоящим программистом OO?
Число обучения что-то новое почти всегда хорошая идея. Тем не менее, каждый язык отличается и имеет свой? Собственный стиль и особенности. Код, написанный в некоторых якобы “чистой” ОО стиле по образцу некоторых других языков (и все причуды) часто неоптимальной и разочарование, когда слишком буквально транскрибируется в C + +. Кроме того, “письменная форма толькичыстыя объектно-ориентированный код” не является одним из моих идеалов, см. мою OOPSLA основном Почему C + + не только объектно-ориентированного языка программирования. Если вы хотите стать хорошим C + + программист И не несколько месяцев, чтобы сэкономить, сосредоточиться на C + + и концепций она воплощает.
Как мне начать изучать C + +?
Естественно, что в значительной степени зависит от того, что вы уже знаете, и ваша причин для изучения C + +. Если вы новичок в программировании, я настоятельно рекомендую вам найти опытного программиста, чтобы помочь вам. В противном случае неизбежны ошибки о языке концепции и практические проблемы, связанные с осуществлением вы используете, могут увеличить в серьезные разочарования.
Вам понадобится учебник для обучения C + +. Это тот случай, даже если ваша реализация идет с достаточным он-лайн документации. Причина в том, что язык и библиотеку документации вместе с примерами кода не являющихся хорошими учителями понятий. Как правило, такие источники молчат о том, почему все так, как они есть, и какие преимущества вы можете ожидать (и вы не должны ожидать) с техникой. Сосредоточьтесь на концепции и методы, не языка технические детали.
Выбирая книгу, посмотрите на один, который представляет Standard C + + и использовать стандартные средства библиотеки на основе комплексного подхода с самого начала. Например, читая строки из входного должен выглядеть примерно так
Ищите книги рекомендации от программистов с твердыми C + + опыт.
Я рекомендую Программирование: принципы и практика использования C + +, но помните, что никто не книга лучше для всех. Обратите внимание на рецензии на Акку (Ассоциации C и C + + пользователей) сайта.
Цель писать идиоматических C + +: избегайте просто писать код в стиле вашего предыдущего язык с помощью C + + синтаксис, мало что можно получить от простого изменения синтаксиса.
Будете ли вы помочь мне с моей домашней работы?
Нет. Извините. Я не делаю (чужих) домашнее задание. Я получаю слишком много запросов о помощи в выполнении домашних заданий и помощь в поиске ошибок в студенческих программ, которые будут в состоянии найти время. Во всяком случае, имея дальний эксперт исправить ваши программы не самый лучший способ учиться. Попробуйте найти местный житель с C + +, опыт, который вы можете обратиться за советом. Хороший учитель лучше всего помочь студенту может быть, может быть, именно поэтому они не так легко найти.
Кроме того, нет, я не предлагаю “хороший проект для студентов для работы на”. Мой опыт показывает, что учиться достаточно об студент и его / ее курс, чтобы знать, что уровень сложности требуется и какой проект представляет интерес занимает много времени. Думать о хорошем проекте, то нетривиальное, и объяснить, что именно проект и как подойти к нему может занять несколько сообщений и несколько часов. Я просто не имеют, что такое время. Помните, что эти запросы приходят по крайней мере раз в неделю. Наконец, некоторые студенты, похоже, идея, что если я предлагаю проект, я морально обязан предоставить достаточно подробную справку по его завершении.
Идеи: Посмотрите на учениях в МС + + PL3 или другие хорошие учебники. Многие из тех, упражнения предназначены для держать студент занят в течение нескольких дней, и читать эти упражнения могут вдохновить предприимчивый студент к так-то подобное. Или посмотрите на не-компьютерных наук частью вашего мира: Может быть, биологии проект мог бы использовать для поддержки нового устройства измерения или другом изучения истории могли бы использовать улучшенный интерфейс базы данных. Многие из лучших проектов и лучшее использование компьютеров находятся за пределами традиционных компьютерных наук.
См. также мою C + + стиль и методы FAQ. Реальная начинающих, стоящих перед их первым “читаем немного данных, сделать что-то к нему, и производить какие-либо данные” упражнения могут быть заинтересованы в очень простая программа или программа чтения строки из входной.
Где я могу получить бесплатный компилятор С + +?
Из многих местах, см. мой C + + компиляторов список.
Вы швед?
Нет, я датчанин. Посмотрите мою биографию.
Какой самый лучший способ улучшить свой C + + программы?
Я не могу сказать. Это зависит от того, как вы его используете. Большинство людей недооценивают абстрактных классов и шаблонов. И наоборот, большинство людей, серьезно ставит под чрезмерным и макросов. Обратите внимание на одну из моих работабо книгидля идей. Один из способов мышления абстрактных классов и шаблонов в качестве интерфейсов, которые позволяют более чистым и логического представления услуг, чем это легко обеспечить с помощью функций или отдельные укоренившиеся иерархии классов. Гл. мой стиль и методы FAQдля некоторых конкретных примеров и идей.
Имеет ли значение, какой язык программирования я могу использовать?
Да, но не ждите чудес. Некоторые люди полагают, что язык программирования может или, по крайней мере, должны решить большинство своих проблем с системой здания. Они обречены на поиск вечно совершенным языком программирования и стать неоднократно оказывались обманутыми. Другие уволить языков программирования как несущественные “детали реализации” и вкладывать деньги в развитие процессов и методов проектирования. Они обречены на программу в COBOL, C, и собственные языки дизайн навсегда. Хороший язык – таких, как C + + – может сделать многое для дизайнера и программиста, до тех пор, как ее сильные стороны и ограничения четко понимать и уважать.
Разве ANSI / ISO стандарты комитета испортить C + +?
Нет, они / мы сделали хорошую работу. Вы можете спорить с деталями (и я, иногда громко), но я счастлив с языком и новой стандартной библиотеки. ISO C + + является лучшим и более последовательный язык, чем более ранние версии C + +. Вы можете написать гораздо более изысканным и удобным C + + программ сегодня, чем это было возможно, если стандарты запуска процесса. Новый стандарт библиотека также настоящей находкой. Предоставление строки, списки, векторы, карты и базовые алгоритмы для таких основных типов делает основное различие с тем, как можно подойти C + +. Смотрите библиотеке главы C + + Programming Language (3-е издание) (Часть 3: Тур стандартной библиотеки доступны в электронном виде) или один из моих последних работ.
C + +0 хбуде еще лучше.
Если у нас будет стандарте С + +?
У нас одна! Окончательное техническое состоялось голосование 14 ноября 1997 года около 10:30 утра. См. пресс-релиз от ISO C + + стандарты комитета. После технической голоса, стандартные была ратифицирована в 1998 году 22-0 всенародным голосованием. Стандарт ISO / IEC 14882. Незначительных пересмотр был издан в 2004 году, гл. мой C + + страницы.
Это язык и стандартные библиотеки описаны в 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 совместимость ключевых дизайнерское решение языке, а не маркетинговый трюк. Совместимость было трудно достичь и поддерживать, но реальную пользу реальным программистом привел, и до сих пор результат сегодня. К настоящему времени, C + + имеет особенности, которые позволяют программистам воздержаться от использования наиболее проблемных С особенностями. Например, стандартные контейнеры библиотеки, такие как вектор, список, карта, и строка может быть использована, чтобы избежать наиболее сложных низкоуровневых указатель манипуляции.
В чем разница между C + 98 и 03 C +?
С зрения программиста нет ни одного. C + 03 пересмотр стандарта релизе исправлена ошибка для исполнителей для обеспечения большей последовательности и портативность. В частности, учебник и справочные материалы, описывающие C + 98 и 03 C + может использоваться как взаимозаменяемые всеми, кроме компиляторов и стандартов гуру.
Лично я стараюсь не использовать термин “C + 03″, потому что это легко спутать с “C + +0 х” и может сложиться впечатление, что C + 98 устарела.
Что будет C + +0 х выглядеть?
Гл. мой C + +0 х FAQ. Цель состоит в “х” в C + +0 х, чтобы стать ’9 ‘: C + 09, не (скажем) C + +0 ха (шестнадцатеричный
.
Обратите внимание, что язык С + + будет оставаться стабильной, поскольку совместимость всегда вызывает серьезную обеспокоенность. Комитет старается не нарушать ваши (стандартный соответствующий код).
Я кратко представил некоторые из моих идей на панели в SD2001w и в немного более подробно в докладе на конференции весной 2002 ACCU. Смотрите также правила для дизайна С + +0 х и других недавних работ на моей странице публикаций. Для более полного списка предложений гл. WG21 сайта.
Если у нас будет новый ARM?
Эллис и Страуструпа: Аннотированный C + + Reference Manualгутарковай известной как “Взвод” был написан в 1989 году и послужил базой для C + + усилий стандартам. Это уже довольно старые и не описывает Standard C + +.
По целому ряду причин, плановой замены (“ARM + +”), который описывает стандарт ISO C + + и не была написана. Как работать на C + +0 х сейчас идет, это слишком поздно для ARM + + на основе ISO C + + 1998. Мне кажется, что я не найду время, чтобы написать новый ARM. 4-е издание TC + + PL и 2-е издание Программирование: принципы и практика использования C + +, чтобы соответствовать C + +0 х (если C + +0 х стала доминирующей C + +), вероятно, будут более важными.
Если вы будете публиковать 4-е издание “C + + Язык программирования”?
Не скоро. Определение C + + и фундаментальные методы, которые он поддерживает, вряд ли существенно изменится к C + +0 х становится доминирующей. Когда я пишу, я ставлю целью для длинных “срок годности” и ISO C + + стандартная обеспечивает основную стабильность. В этом контексте важно, что C + + Programming Language (3-е издание) описывает стандарт C + +, стандартной библиотеке, и методы, которые они поддерживают, а не конкретной реализации и некоторые собственные библиотеки. Что находится в Текущий ISO C + + стандартная и описано в моей третьей Издание, остаются в силе C + + для долгие годы – даже после пересмотренного стандарта является.
Удивительно, немецкий перевод “Special Edition” называется 4-е издание.
Стоит ли покупать “Special Edition” с “C + + Язык программирования”?
Конечно! Купить рано и часто
Если серьезно, разница между текущим тиражи специальные издания и 3-е издание просто твердом переплете (и разница в цене имеется в виду, что более сильные обложки).
Если бы я был? C + + программист, который не читал C + + Programming Language (3-е издание), я бы покупать и читать или 3-е издание или специальное издание. Если бы я использовал мои учебники и ссылки трудно, я бы выбрал твердом переплете. Крышка на третий лучший мягкой обложке доступна, но она не равна твердой обложке специального издания.
Когда у меня уже было 3-е издание, я бы купил SE, если мой действующий экземпляр был изнашивание или если копия была ранней печати (третий в настоящее время около 30 печатных изданий и ГП около 20).
По сравнению с первым печати, специальные издания и последние тиражи имеют 3-е издание 1000 + исправления и уточнения. В тяжелых C + + пользователю, я считаю, что значительным. Есть также два новых приложения (чуть более 100 страниц и доступен для скачивания: Языки и стандартной библиотеки Надежное исключение).
Существующие материал не двигался так номера страниц могут быть использованы для обозначения материала в старых печатных изданий, новые тиражом 3-е издание, а в SE.
SE также улучшение индекса.
В чем разница между “TC + + PL” и “Программирование” книги?
C + + Язык программирования в первую очередь написана для опытных программистов, кто хочет изучить C + +. Это стиль, который профессионального книги. программирование – принципы и практика использования C + +, в первую очередь написана для тех, кто хочет научиться программированию с использованием C + +. Он может быть использован / читают люди, которые не имеют или только слабый фон программирования, а также люди, которые хотят узнать современные методы программирования, таких, как объектно-ориентированное программирование и обобщенное программирование, так как поддерживается C + +. Это стиль, что в тексте книги.
Где я могу найти свободный машиночитаемый копии ваших книг?
Есть никаких правовых свободной машиночитаемых копий моих книг. Если вы видите, копия в свободном доступе оно должно быть авторских прав (то есть, она была украдена).
Addison-Wesley предлагает электронную версию через Safari онлайн богослужебных книгах
Какой компилятор С + + вы рекомендуете? Какие библиотеки?
Я не рекомендую. Было бы не справедливо. Однако, не получить последние версии. Естественно, что новые версии компиляторов примерный стандарт ИСО гораздо ближе, чем компиляторы от несколько лет назад.
За неполный перечень C + + реализации, гл. мой C + + компиляторов список.
Также, где это возможно, предпочитают стандартные библиотеки для нестандартных “библиотеки фонда” и стараются свести к минимуму использование собственных расширений.
Является Java язык, который разработали, если Вы не должны быть совместимы с C?
Количество Java не является даже близко. Когда люди настаивают на сравнении C + + и Java – как они, кажется, делают – я предлагаю им читать Дизайн и эволюция C + + (D & E), чтобы понять, почему C + +, так оно и есть, и рассмотреть оба языка в свете критериев проектирования я набор для C + +. Эти критерии, очевидно, будет отличаться от критериев Java команда Sun. Несмотря на сходство синтаксических, C + + и Java очень разных языках. Во многих отношениях, Java кажется ближе к Smalltalk, чем 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 #?
У меня нет комментариев по C # в качестве языка. Это займет много, чтобы убедить меня, что мир нуждается в еще один собственный язык. Это будет особенно трудно убедить меня, что он нуждается язык, который тесно интегрирован с конкретными собственная операционная система.
. Если вы хотите написать исключительно для Чистая платформы, C # это не самый худший альтернатива, но помните, что С + + является полностью поддерживает – хотя и менее сильно раздутыми – альтернатива для этой платформы.
Что вы думаете о C + + / CLI?
C + + / CLI представляет собой набор расширений к ISO C + +, которая обеспечивает чрезвычайно полный “привязка” С + + CLI Microsoft (общеязыковая инфраструктура). Он был стандартизированные ECMA (ECMA-372). Я рад, что он делает все возможности CLI легко добраться из С + + и рады, что С + + / CLI это гораздо лучше, языка, чем его предшественник “Managed C + +”. Тем не менее, я менее счастлив, что C + + / CLI достигает своих целей, существенно увеличивая C + + с отдельной функции языка для каждой функции интерфейса командной строки (интерфейсы, свойства, шаблоны, указатели, наследование, перечисленными, и многое, многое другое) . Это будет основным источником путаницы (что бы кто-нибудь делает или говорит). Множество новых объектов языка C + + / CLI по сравнению с стандартом ISO C + + программистов попытки писать невыносимыми код, который (часто незримо) стали тесно связаны с Microsoft Windows.
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:
ECMA C + + / CLI стандартные.
Великобритания ISO C + + возражение панели (в том числе несколько примеров кода).
ECMA в ответ на Великобританию (и других) возражения
Дизайн Херб Саттер обоснование C + + / CLI
Почему вы так заинтересованы в мобильности?
Успешная программа долгоживущих; жизни охватывает десятилетия не редкость. Хорошее приложение / программа часто переживает аппаратное он был разработан для операционной системы она была написана для, система базы данных она изначально использовалась, и т.д. Часто, хороший кусок программного обеспечения переживет компаний, которые поставляли основные технологии, используемые для создания его.
Часто успешная программа приложения / у клиентов / пользователей, которые предпочитают разнообразие платформ. Набор желательно платформ изменения как изменения количества пользователей. Будучи привязаны к одной платформе или одного поставщика, ограничивает применение / программа “Потенциал использования.
Очевидно, что полная независимость от платформы несовместима с возможностью использовать все платформы конкретных объектов. Тем не менее, часто можно приблизительный независимость платформы для приложений путем доступа платформы средства через “тонкие интерфейс”, представляющая зрения приложения его окружающей среды, как библиотека.
Вы действительно рекомендую Ада над C + + для больших проектов?
Нет, я понятия не имею, кто начал этот слух, но оно должно быть чрезмерно увлечен или вредоносные Ада преданным.
Вы бы сравнить C + + для “какого-либо языка”?
Нет, извините, я не буду. Вы можете найти причину в вводный ноты Дизайн и эволюция C + +:
“Некоторые рецензенты попросил меня сравнить C + + с другими языками Это я решил не делать Итак, я вновь подтвердил давнее и твердое убеждение: … Язык сравнения редко значимых и еще реже справедливой хорошее сравнение основных программирования языков требует больше усилий, чем большинство людей готовы потратить, опыт работы в широком диапазоне областей применения, жесткая поддержание отдельных и беспристрастный взгляд, и чувство справедливости. У меня нет времени, и как дизайнер С + +, моя беспристрастность никогда не будет в полной мере заслуживает доверия.
Я также беспокоиться о явлении я неоднократно наблюдал в честной попытки языком сравнений. Авторы стремятся быть беспристрастным, но безнадежно предвзятым, сосредоточив внимание на одно приложение, единый стиль программирования, или одной культуры среди программистов. Хуже, когда на одном языке, гораздо более известный, чем другие, тонкое изменение в перспективе происходит: Недоработки известного языка считаются незначительными и простые решения представлены, тогда как аналогичные дефекты на других языках, которые считаются основополагающими. Часто, обходные пути, обычно используются в менее известных языков просто неизвестных людей, которые делают сравнения или считается неудовлетворительным, поскольку они будут неработоспособным в более знакомом языке.
Кроме того, информацию о хорошо известном языке, как правило, полностью соответствующий современным требованиям, а для менее известных языков, авторы опираются на несколько лет информацию. Для языков, которые следует сравнение, сравнение языка X, как это определено три года назад по сравнению с языка Y, как он появляется в последней экспериментальная реализация не является ни справедливым, ни информативным. Таким образом, я установить ограничения на комментарии о других языках, кроме C + + для обобщений и очень конкретных замечаний “.
Тем не менее, я считаю, C + + лучший выбор языка программирования для широкого круга людей и приложений.
Другие делают сравнить их языков C + +, разве это не раздражают?
Он делает, когда это делается некомпетентно или для получения коммерческой выгоды. Наиболее широко распространены сравнения, как правило, написаны сторонниками какого-либо языка, Z, чтобы доказать, что Z лучше, что и другие языки. Учитывая его широкое применение, C + + часто первое место в списке языков, на которых сторонники Z хочет доказать, уступает. Часто такие документы “, опубликованной” или распространяться компания, которая продает Z как часть маркетинговой кампании. Удивительно, но многие, кажется, принимаете бумаги нерассмотренных написано людей, которые работают на компанию, продающую Z “доказать”, что Z лучше серьезно. Одной из проблем является то, что всегда Есть доля правды в таких сравнений. В конце концов, ни один язык лучше, чем любой другой всеми возможными способами. C + +, конечно, не идеальная, но селективного истина может быть наиболее привлекательным, а иногда и полностью ввести в заблуждение.
При взгляде на языке сравнения рассмотреть, кто написал его, подумайте, если описании фактической и справедливой, а также если критериев сравнения сами по себе являются справедливыми для всех языков рассматривается. Это нелегко.
Вы не будете сравнивать C + + для других языков, но вы пишете обличительный речи о C + +?
Я не пишу обличительный речи (это враждебная характеристика какой-либо текст), но я считаю это разумным – возможно, даже обязанность – для тех, кто назначен языком объяснить свои достоинства и защищать ее от вражеских характеристики. Смотрите список моих публикаций. В paticular гл. в моей обширной и рецензирование документов для истории ACM по программированию конференции:
Б. Страуструп: История C + +: 1979-1991. ACM HOPL-II. 1993 год.
Б. Страуструп: Эволюция языка в себе и для реального мира: C + + 1991-2006 гг. ACM HOPL-III. 2007 год.
Часто я также отметить ограниченность C + + и основных положений дизайн C + + (см., например, D & E).
C лучше, чем С + + для небольших проектов, не так?
Не по моему мнению. Я никогда не видел проект, для которого C была лучше, чем C + + по любой причине, но отсутствие хорошего компилятора Си + +.
Является ли C подмножество C + +?
В строгом математическом смысле, то С не является подмножеством C + +. Есть программы, которые действительны С, но не действует C + + и даже несколько способов написания кода, который имеет другое значение в С и С + +. Тем не менее, C + + поддерживает каждый технология программирования поддерживается C. Каждая программа C может быть записано в основном таким же образом в C + + с тем же во время выполнения и экономии пространства. Это не редкость, чтобы иметь возможность конвертировать десятки тысяч строк ANSI C до C-стиле C + + в течение нескольких часов. Таким образом, C + + в такой же степени расширением ANSI C, как ANSI C является подмножеством K & RC и сколько ISO C + + является расширением C + +, как она существовала в 1985 году.
Хорошо написанные C, как правило, С + + и. Например, каждый пример в Кернигана и Ричи: “Язык программирования C (второе издание)” также C + + программы.
Вызов необъявленная функция бедных стиль в С и незаконным в C + +. Так передачи аргументов в функцию, используя заявление, что не список аргументов типа:
В 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 + + обеспечивает более надежную проверку типов, чем С и непосредственно поддерживает широкий диапазон стилей программирования, чем С. С + + является “лучшей С” в том смысле, что он поддерживает стили программирования осуществляется с помощью 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 + + несовместимости предоставлять никаких преимуществ в обществе в целом, вызывают серьезные проблемы для значительной части C / C + + сообщество, и мог, – с большим трудом – быть устранены.
Для гораздо более подробное изложение моих взглядов на C / C + + совместимость см. серию статей я писал об этом:
Б. Страуструп: C и C + +: анализ совместимости. C / C + + Журнал пользователя. Сентябрь 2002 года.
Б. Страуструп: C и C + +: чехол для совместимости. C / C + + Журнал пользователя. Августе 2002 года.
Б. Страуструп: C и C + +: Братья и сестры. C / C + + Журнал пользователя. Июля 2002 года.
Б. Страуструп: соперничество между детьми: C и C + +. AT & T Labs – Научно-исследовательский технический отчет. TD-54MQZY. Январь 2002 года.
Я полагаю, что если несовместимости были исключены (путем внесения изменений в С и С + +), все еще будет объекты, называемые C и C + +, но потом C действительно было бы определить как подмножество C + +.
Пожалуйста, обратите внимание, что эти работы были написаны в конце 2001 и начале 2002 года, когда еще можно было себе представить скоординированные действия C и C + + комитетов по стандартам ведущих к практическим результатам к концу десятилетия. Этого не произошло.
Почему вы сделали C + + (почти), совместимые с C?
Я хотела C + +, чтобы быть совместимым с полного языка с достаточной производительности и гибкости для даже самых требовательных систем программирования. Я совершенный ужас производства еще не еще один красивый язык с непреднамеренных ограничений. Гл. глава 02/07 Дизайн и эволюция C + + для исторических деталей и читать статьи в Неужели вы думаете …? для (ретроспективное) технические обсуждения C / C + + проблемы с совместимостью.
В то время я считал C лучших систем язык программирования доступны. Это было не так очевидно, то (1979) как впоследствии, но я должен был эксперты, такие как Деннис Ритчи, Стив Джонсон, Сэнди Фрэзер, Грэг Чессон, Дуг Макилрой, а Брайан Керниган по коридору, у которого я мог бы учиться и получить обратную связь. Без их помощи и совета, и без C, C + + была бы обречена на провал.
Вопреки слухам повторяться, я никогда не говорил, что я должен был использовать C, и я не был никогда не говорил, чтобы не использовать С. В самом деле, первый C + + руководство выросла с TROFF источник руководства С, что Деннис дал мне. Многие новые языки были разработаны в Bell Labs, в “Исследовании” по крайней мере, не было никаких правил сохранения язык фанатизма.
Что вы думаете о C / C + +?
Нет, это не совсем вопрос, который я часто получаю. В этом смысле, это только “поддельные FAQ” в этом FAQ. Тем не менее, она должна быть FAQ, потому что люди используют “C / C + +”, как если бы это означало что-то конкретное и как если бы они знали, что это значит, что приводит к много путаницы и страдания. Люди должны спросить: “Что такое C / C + +?” , А затем на отражение прекратить использование термина. Это вредит.
Существует не язык, называемый “C / C + +”. Фраза, как правило, используется людьми, которые не имеют понятия о программировании (например, сотрудников HR-менеджеров и бедными). Кроме того, он используется людьми, которые просто не знают, C + + (и зачастую не C либо). Если используется программистами, это обычно означает “С + + С с несколькими полезными и множество бесполезных функций, добавленных сложные” отношения. Часто, это точка зрения людей, которые любят писать свои собственные строки и хэш-таблиц с небольшим знанием стандартной библиотеки за Printf и тетсру. Есть люди, которые придерживаются ограниченного подмножества C + + для вполне веские причины, но они (насколько я заметил), а не люди, которые говорят “C / C + +”.
Я использую C / C + + только в такие фразы, как “C / C + + совместимость” и “C / C + + сообщество”.
Если C + + придумал?
Я начал работать на то, что стала C + + в 1979 году. Первоначальная версия была названа “C с классами”. Первая версия C + + использовался для внутренних нужд в AT & T в августе 1983 года. Название “C + +” был использован конце того же года. Первая коммерческая реализация была выпущена октября 1985, в то же время, как публикация первого издания C + + язык программирования. Шаблоны и обработка исключительных ситуаций были включены в конце 1980-х и задокументированы в Аннотированный C + + Reference Manual и C + + Programming Language (2-я редакция).
Нынешнее определение C + + является ISO C + + Standardаписана в C + + Programming Language (3-е издание).
Вы можете найти более полную шкалу и более подробные объяснения в Дизайн и эволюция C + + и истории C + +: 1979-1991.
Почему вы изобретать C + +?
Я хотел написать эффективных программ систем в стилях вдохновленные Simula67. Чтобы сделать это, я добавил условия для лучшей проверки типов, абстракции данных и объектно-ориентированное программирование на С более общей целью было создание языка, на котором я мог бы написать программы, которые были как эффективными, так и элегантно. Многие языки заставит вас выбирать между этими двумя альтернативами.
Конкретных задач, которые заставили меня начать разработку и осуществление C + + (изначально назывался “C с классами”) были связаны с торговой сети операционной системы по сети.
Вы можете найти более подробные объяснения в Дизайн и эволюция C + +. См. также История C + +: 1979 1991 Развитие языка в себе и для реального мира: C + + 1991-2006 гг.
Почему AT & T поддержки развития C + +?
Когда я впервые разработана C + +, AT & T построен систем большей сложности и с большей надежностью, чем требования большинства организаций. Таким образом, мы должны были повлиять на рынок и помочь установить стандарты, которые отвечают нашим потребностям – иначе мы бы не инструменты для построения нашей системы. Предоставлен самому себе “промышленность” создаст языка и инструменты для работы с “средний” проблем. Точно так же учителя имеют тенденцию сосредотачиваться на языки и инструменты, которые служат студентам и исследователям хорошо – даже если они не масштабируется для самых требовательных задач.
В то время, когда я разрабатывал C + + – а до этого, когда Кен Томпсон и Деннис Ритчи разработал Unix и C – AT & T, вероятно, самый большой в мире гражданский пользователь (и потребитель) программных средств. Затем, мы, вероятно, использовались более широкий диапазон систем – от мельчайших встраиваемых процессоров для крупнейших суперкомпьютеров и систем обработки данных. , Которые ставят во главу угла системы, которые были применимы во многих технических культур и на многих платформах. С и С + + были разработаны с такими требованиями в виду.
Итак общества имеет важное значение, и собственные функции рассматриваются как ограничивает выбор платформ и поставщиков. Как следствие AT & T был и остается основным сторонником формальных стандартов (например, ISO C и ISO C + +).
На самом деле, AT & T заработал достаточно денег на Cfront, мой оригинальный C + + компилятор, платить за развитием C + + в несколько раз.
У вас есть C + +?
Нет, если кто-то “владеет C + +”, он должен быть ISO. AT & T дал право на C + + руководство, которое я написал ISO. ISO C + + Standard, защищена авторским правом ISO.
Компилятора поставщики не платят гонораров мне, ни AT & T для C + + и ISO стандарты представляют собой спецификации предназначены для безвозмездное использование всех (как только они заплатили ISO или национального стандарта комитет по своей копии стандарт). Отдельные компиляторы являются собственностью их соответствующих производителей / поставщиков.
“Но кто-то из ШОС заявили, что они обладают C + +”, является то, что не так? Это полная чушь. Я видел, что интервью. ШОС парень явно не знали, что C + + был, называя его “Си + +”. Самое большее, что ШОС может иметь в собственности 15-летняя и серьезно устаревшую версию Cfront – мой оригинальный C + + компилятор. Я был достаточно осторожен, чтобы не патента или торговой марки ничего общего с C + +. Это одна из причин мы пишем простой “C + +”, а не “C + + (TM)”. C + + стандарт Необремененный патентов – комитет тщательно проверяется, что тоже.
Откуда название “C + +” берутся?
Глава 3 D & E: “ Я выбрал C + +, потому что был маленького роста, были хорошие интерпретации, и не в форме “прилагательное C” ‘В C + + может, в зависимости от контекста, следует читать как “дальше” “преемник”, или “приращение”, хотя это всегда произносится как “плюс плюс”. Название C + + и его второе место C + + являются благодатной источников для шуток и каламбуров – почти все из которых были известны и оценены, прежде чем название было выбрано. Название C + + был предложен Риком Mascitti. Впервые он был использован в декабре 1983 года, когда он был отредактирован в окончательной копии [Страуструп, 1984] и [Страуструп, 1984c].
В главе 1 TC + + PL: “ имя C + + (произносится как “видит плюс плюс”) было придумано Риком Mascitti в летом 1983 года. Имя означает эволюционный характер изменений С; “+ +” является оператором С приростом. Немного короче название “C +” является синтаксической ошибки, она также используется в качестве имени несвязанных языке. Знатоки семантики С находят C + + уступает + + C. Язык не называется D, потому что это расширение C, и он не пытается устранить проблемы, удаляя функции. Для еще одну интерпретацию названия C + +, гл. дополнение к [Оруэлла, 1949].”
“С” в С + + имеет долгую историю. Естественно, это название языка Деннис Ритчи разработаны. Немедленное предка C был интерпретировать потомкам BCPL называемые B разработаны Кеном Томпсоном. BCPL была разработана и реализована Мартин Ричардс из Кембриджского университета во время посещения Массачусетском технологическом институте в Кембридже другие. BCPL в свою очередь, основные CPL, CPL, где это имя довольно большой (для своего времени) и элегантный язык программирования, разработанный совместными усилиями университетов Кембриджа и Лондона. До Лондона люди присоединились к проекту “С” выступает за Кембридже. Позже, “С” официально выступает за комбинированный. Неофициально, “С” выступает за Кристофер потому что Кристофер Стрэчи был главным власть за CPL.”
На каком языке вы использовали для написания C + +?
Первый C + + компилятор (Cfront) была написана в C + +. Чтобы построить это, я впервые использовал C писать “C с классами”-к-C препроцессора. “C с классами” был диалекте C, который стал непосредственным предком для C + +. Это препроцессор переводится как “C с классами” конструкции (такие как классы и конструкторы) в С. Это был традиционный препроцессор, который не понимал их язык, оставил большую часть проверки типов для компилятора C, чтобы сделать, и переведены отдельные конструкции без полного знания . Затем я написал первую версию Cfront в “C с классами”.
Cfront был традиционный компилятор, который сделал полный синтаксис и семантические проверки C + + исходный. Для этого он полный синтаксический анализатор, построенный таблицы символов, и построил полное внутреннее представление дерева для каждого класса, функции и т.д. Он также сделал некоторые оптимизации уровне исходного кода на его внутреннее представление дерева C + + конструкций перед выводом С. версию, порожденный С, не полагаться на C для любого типа проверки. Он просто использовал С как ассемблер. Полученный код был бескомпромиссно быстро. Для получения дополнительной информации см. D & E.
Почему нет C + + есть сборка мусора?
Если вы хотите автоматического сбора мусора, Есть хорошие коммерческие и общественные домена сборщики мусора для C + +. Для приложений, где сбор мусора подходит, C + + является отличным сборщиком мусора язык с производительностью, что выгодно отличается от других мусор языках. Смотрите C + + Programming Language (3rd Edition) для обсуждения автоматический сбор мусора в C + +. Смотрите также, Ханс-J. Боем это сайт для C и C + + сборки мусора.
Кроме того, C + + поддерживает методы программирования, который позволяет управление памятью, чтобы быть безопасным и неявных без сборщика мусора.
C + +0 хпрапанов GC ABI.
Почему нет C + + есть GUI?
C + + имеет множество коммерческих и открытых графических интерфейсов (например, Gtkmm, SmartWin + +, V C + + GUI, FLTKи Qt). В частности, каждый поставщик предоставляет платформу C + + библиотека для доступа к своим графическим интерфейсом. Проблема в том, что он не имеет стандартный графический интерфейс, и это действительно серьезная проблема.
Обратите внимание, что предоставление графического интерфейса и технические и политические проблемы. Есть много графических интерфейсов пользователя с большим количеством пользователей, да и вообще они не хотели бы некоторые другие GUI, который был объявлен стандартом. В любом случае, комитет по стандартам не имеют ресурсов для создания новых и лучших GUI.
Почему нет C + + темы поддержки?
ISO C + + стандарт не упомянуть параллелизм, но все основные C + + темы реализации поддержки; Pthreads работает по сути везде, и многие производители платформы поддержки собственных системных потоков. Для переносимости, использовать некоторые темы библиотеки, такие как усиление потока.
C + +0 хпрапануе темы.
Является ли C + + в упадке?
Нет, я так не думаю. C + + использовать похоже, начинает снижаться в некоторых областях и, чтобы быть на подъеме в других. Если бы мне пришлось угадывать, я подозреваю чистое сокращение то на протяжении 2002-2004 годов и чистое увеличение в 2005-2007 годах, но я сомневаюсь, что кто не знает. Большинство популярных мер в основном меры шума и должна представить свои выводы в децибелах, а не “популярность”. Многие из основных видов применения С + + в инфраструктуру (телекоммуникации, банковское дело, встраиваемые системы и т.д.), где программисты не ходят в конференциях или описать свой код в общественных местах. Многие из наиболее интересных и важных C + + приложений не заметили, они не для продажи населению, как программных продуктов, и их реализация языка никогда не упоминается. Примерами являются Google и “800″ телефонных номеров. Если бы я думал о “C + + внутри” логотип в 1985 году, программирование мир мог бы быть другим сегодня.
Один простой вещи, что смущает многих дискуссий использования языка / популярность различие между относительной и абсолютной мере. Например, я говорю, что C + + использовать растет, когда я вижу пользователь населения вырастет на 200 тысяч программистов от 3,1 M до 3.3M. Тем не менее, кто-то может утверждать, что “C + + умирает”, потому что “популярность” снизилась с 16 процентов до 11 процентов от общего числа программистов. Оба требования могут быть одновременно истинными, как число программистов, продолжает расти и, особенно, как то, что считается программирования продолжает меняться. Я думаю, что С + + является более проводить свою собственную в своей традиционной области ядра, таких как инфраструктура, системы программирования, встроенных систем и приложений с серьезными времени и / или пространственных ограничений. См. также мою DevX интервью.
Что делается для улучшения C + +?
Исполнителей постоянно совершенствуем свои компиляторы, библиотеки и инструменты. Последние пять лет наблюдается очень значительное улучшение качества. Это то, что самым непосредственным и самым немедленно помогает людям, то и множество имущественных и открытым исходным кодом, библиотеки и инструменты, которые непрерывно вырабатывается C сообщество + +. Смотрите мой C + +, старонкадля примеров.
ISO C + + стандартнаябыла ратифицирована в 1998 году. Следующая версия, по прозвищу C + +0 х, является полным и общественного рассмотрения, после чего происходит “proofeading пройти”, и процесс ратификации. Вы можете найти статей, описывающих C + +0 х на мою страницу публикаций и все документы, связанные с новым стандартам по ISO C + + страниц комитета дома. Мой HOPL-III бумажка последние 15 лет C + + эволюция может лучшее объяснение того, что происходит и почему. Недавнем интервью содержит список новых возможностей языка и стандартные библиотеки.
При рассмотрении эволюции C + +, не стоит забывать, что цель состоит в том, чтобы не добавить большое количество новых функций, но и улучшить C + + для своих ключевых областях приложений, включая системы программирования и здание библиотеки, не нарушая старого кода (Есть миллиарды строк C + + ” там “).
Почему код, сгенерированный для “Привет мир” программы в десять раз больше для C + +, чем для C?
Это не на моей машине, и она не должна быть на вашей. Я даже видел C + + версии “привет мир” программы меньше, чем версия C. В 2004 году я протестированы с использованием GCC-O2 на Unix и двух вариантах (iostreams и stdio) дали одинаковые размеры. Существует нет языка причина одна версия должна быть больше, чем другие. Это все вопрос о том, как разработчик организует стандартных библиотек (например, статическое связывание против динамического связывания, поддержка языком локали против поддержки возможной благодаря опции и т.д.). Если одной из версий гораздо больше, чем другие, сообщите о проблеме реализатор из великих.
Как наследие язык, как C + + конкурировать с современным, современные языки?
Естественно, называя C + + наследия язык показывает смещения (см. наследство кода). Именно в сторону, люди, как правило, думает о Javaабо C #, если они задать такой вопрос. Я не буду сравнивать C + + для этих языков, но я могу отметить, что “современные” не обязательно означает “лучше”, и что как Java и C #, уходят корнями в 1980-е годы стиль ООП в еще большей степени, чем ранние С + +.
С 1987 года или около того, Центр развития языка С + + и связанные с ней стиле программирования было использование шаблонов, статический полиморфизм, обобщенное программирование и Мультипарадигмальное программирования. Это способ выходит за рамки столь раздутыми собственные языки. Еще одно важное отличие в том, что C + + поддерживает пользовательские типы в той же степени, как встроенные типы. Это – особенно в сочетании с использованием шаблонов, конструкторы и деструктор – позволяет C + + программистом, чтобы использовать программирование и дизайн методы, которые (ИМО) являются более продвинутыми, чем поддерживается в языках, с которым C + + является наиболее часто сравнивают, например , см. RTTI.
Standard C + + и дизайн и программирование стилей он поддерживает в долгу перед функциональных языков, особенно в ML. Ранние варианты механизмов ML-тип вычета были (вместе с многим другим) часть вдохновения шаблонов. Некоторые из наиболее эффективных методов функционального программирования были частью вдохновения STL и использование функции объектов в C + +. С другой стороны, функциональное сообщество пропустил лодку с объектно-ориентированным программированием, и немногие из языков и инструментов этого общества выгоду от созревания опыт крупномасштабного промышленного использования.
Очевидно, я не думаю, что сбор смеццязъявляецца единственной определяющей характеристикой “продвинутых” в контексте языков программирования. В частности, обратите внимание, что C + + обеспечивает поддержку для эффективного и результативного управления памятью, которые могут устранить утечки ресурсов без использования сборщика мусора. Если вы не согласны, вы можете просто начать использовать сборщик мусора для C + +; Есть хорошие доступны.
Что такое “Мультипарадигмальное программирования”?
Мультипарадигмальное программирование причудливый способ сказать “программирование с использованием более одного стиля программирования, каждый в своей наилучший эффект”. Например, при использовании объектно-ориентированного программирования, когда во время споров между различными типами объектов не требуется, и обобщенное программирование, когда статическая безопасность типа и во время выполнения в большом почете. Естественно, что главная сила Мультипарадигмальное программирования в программах, где более одной парадигмы (стиль программирования) используется, так что было бы трудно добиться такого же эффекта путем составления системы из частей, написанных на языках, поддерживающих различные парадигмы. Я нахожу наиболее убедительным случаях Мультипарадигмальное программирования находились там, где технологии различных парадигм используются в тесном сотрудничестве, чтобы написать код, который является более элегантным и более легким в обслуживании, чем это возможно в рамках одной парадигмы. Простой пример обхода статически типизированных контейнер объектов полиморфного типа:
Здесь, форма будет абстрактный базовый класс, определяющий интерфейс для иерархии геометрических фигур. Этот пример легко обобщается на любом стандартном контейнере библиотеки:
Книга Джима Coplien в “Мультипарадигмальное Дизайн для C + +” (Addison Wesley, 1998) исследует использование нескольких парадигм в контексте разработки и методы проектирования.
Почему C + + такой большой?
C + + не так велика, как некоторые люди себе представить. Это не крошечный язык предназначен для минимальными языка для преподавания, но и не языка людей, которые наиболее часто сравнивают его, например, C, Java, C #. Они также огромная по сравнению, скажем, Паскаль, как доктор Вирт изначально определили его – по вполне понятным причинам, я думаю. Мире программирования является гораздо более сложным, чем это было 30 лет назад, и современных языков программирования отражают это.
C + + стандарт 740 страниц, но, что включает в себя 400 страниц библиотека описаний. Языковые особенности описаны (в мельчайших деталях) в 340 страниц. Кроме того, ТК + + PLскладае 1000 страниц +, но только 350 из тех, посвященный толкованию языковых средств и их использование; остальное обсуждать библиотеки, методы программирования и т.д.
C + + непосредственно поддерживает (то есть в языке), что некоторые другие поддержку языков с помощью библиотек, так что часть языка будет относительно большим. С другой стороны, если вы хотите написать “типичных современных приложений”, которые необходимо учитывать операционной системы интерфейсы, GUI, баз данных, веб-интерфейсов и т.д. Сумма возможности языка, библиотеки и программирования конвенциями и стандартами, что вы должны ознакомиться с карликом языка программирования. Здесь C + + ‘ы размер может быть преимуществом, поскольку она лучше поддерживает хорошие библиотеки.
Наконец, дни, когда начинающий программист может знать всех языков исчезли, по крайней мере на тех языках, на широкое промышленное использование. Мало кто знает “все С” или “все Java”, либо, и никто из них являются новичками. Отсюда следует, что никто не должен извиняться за то, что новички не знаю, все C + +. То, что вы должны сделать – на любом языке – это выбрать подмножество, получить работу написания кода, и постепенно узнать больше о языке, его библиотеки, и его инструментов. За мое предложение о том, как новички могут подходить C + +, см. Программирование: принципы и практика использования C + +.
Что вы думаете о EC + +?
EC + + является (почти) подмножество C + + не хватает исключений, шаблоны, пространства имен, поддержка RTTI, множественное наследование и т. д., который определяется по “промышленного консорциума”. Я не в пользу языка подмножество или диалекты. Я особенно не любят подмножества, которые не поддерживают стандартную библиотеку, так что пользователи этого подмножества должны изобрести свои собственные несовместимые библиотеки фундамент. Я боюсь, что определено подмножество C + + может расколоть сообщество пользователей и вызвать раздражительность (3/31/1999: Я только что видел рекламу, которая использована яркая графика, чтобы показать, как EC + + пониженная “жир” (т.е. памяти) путем отмены – среди других вещи – имен, шаблоны и C + + строки стандартного Вздох).!. Я решительно предпочитаю работать на “стандарты” происходит в открытом форуме (например, ISO или организации национальных стандартов).
Для обсуждения того, как встроенные системы разработчики могут решению проблем производительности с использованием стандартных C + + (лучше, чем с помощью диалекта) см. ISO C + + комитета отчет о деятельности. Насколько мне известно, EC + + мертв (2004), и если это не так должно быть.
Для посмотрим, как ISO C + + могут быть использованы для серьезного программирования встроенных систем, см. автомобиля JSF воздуха C + +, стандарты кодирования.
C + + получил свое объектно-ориентированной концепции с Smalltalk?
Нет. C + + получил ключевые понятия классов, производных классов, виртуальных функций (другими словами, понятия инкапсуляции, наследование и полиморфизм) с Simula так же, как Smalltalk и сделал. С точки зрения семейных отношений, C + + и Smalltalk являются братьями и сестрами.
Является ли C + + объектно-ориентированного языка?
С + + является мульти-парадигмы языка программирования, который поддерживает объектно-ориентированное и другие полезные стиле программирования. Если то, что вы ищете что-то, что заставляет вас делать то, в точности так, C + + не так. Существует не один правильный способ писать каждую программу – и даже если бы не было бы способ заставить программистов использовать его.
Тем не менее, писать в стиле С программами на С + + для большинства приложений, не оптимальное использование C + +. Чтобы быть действительно эффективными C + + программист, вы должны использовать абстракции и механизмы типа системы таким образом, который соответствует разумно с их намерением. Попытки игнорировать или поражение C + + тип системы является наиболее удручает.
Написание Java-кода в стиле С + + может быть разочарование и неоптимальной, как написание C-код в стиле C + +.
Для более детального обсуждения гл. любой из моих обзор или стиль статей с моей библиографии. В частности, см. мою OOPSLA бумаги “Почему C + + не только объектно-ориентированный язык программирования”.
Неужели вы так говорите?
“C позволяет легко выстрелить себе в ногу, C + + делает это тяжелее, но если вы делаете это удары всю свою ногу”. Так, я сказал что-то подобное (в 1986 году или около того). То, что люди, как правило, не пропустите, это то, что то, что я сказал, что C + + является в той или иной степени относится ко всем мощные языки. Как защитить людей от простых опасности, они попадают в новые и менее очевидные проблемы. Кто-то, кто избегает простых задач может быть просто заголовок не очень простая. Одна из проблем, с очень поддерживает и защитных оболочек является то, что сложные проблемы могут быть обнаружены слишком поздно или слишком трудно исправить однажды обнаружили. Кроме того, редкая проблема труднее найти, чем часто, потому что вы не подозреваете этого.
“В C + +, есть намного меньше и чище языка изо всех сил пытается выбраться из”. Да, это цитаты можно найти на странице 207 Дизайн и эволюция C + +. И нет, что более мелкие и более чистого языка не Java или C #. Цитата происходит в разделе “Файлы и Beyond Синтаксис”. Я указывал на то, что C + + семантика намного чище, чем его синтаксис. Я думал о стилях программирования, библиотек и среды программирования, который подчеркнул, более чистых и эффективных методов более архаичные использует сосредоточены на низкоуровневые аспекты C.
“Я всегда хотел мой компьютер, чтобы быть максимально простым в использовании, как мой телефон; мое желание сбылось, потому что я больше не могут понять, как использовать свой? Телефон”. Я сказал, что после разочарований попытки использовать “многофункциональных” телефон-то около 1990 года. Я уверен, что настроения не был оригинален, и, вероятно, даже не общая формулировка, кто-то должно быть, думал о том, что передо мной.
“Есть только два типа языков: те люди жалуются и те, никто не использует”. Так. Опять же, я очень сомневаюсь, что настроения оригинала. Конечно, все “Есть только два” кавычки должны быть приняты с недоверием.
“Доказательство по аналогии мошенничество”. Так, страница 692 ТК + + PL. Хорошей аналогией является отличным способом иллюстрировать идею, но слишком часто подобные аналогии не сопровождаются твердой аргументации, данных и т.д.
“Люди, которые думают, что знают все на самом деле раздражают тех из нас, кто знают, что мы не”. Так.
“C + + это мой любимый мусор язык, потому что он генерирует очень мало мусора”. Так, см. Почему нет C + + есть сборка мусора? И Как справляться с утечками памяти.
“Если вы думаете, это просто, то вы не поняли проблему”. Да, но нет, я не помню, какой вопрос вызвал такой ответ.
“Есть более полезные системы, разработанные на языках считается ужасным, чем в языках хвалили за то, что красиво – много больше”. Так, в Массачусетском технологическом институте интервью Обзор технологий и в других местах. Там я также сказал:
“Я думаю, мы должны смотреть на элегантность в приложениях, созданных, а не сами языки”. Я должен был сказать “больше”, а не “вместо”.
“Чтобы использовать C + + хорошо, вы должны понять, дизайн и технология программирования”.
“C + + предназначен, чтобы позволить вам выразить свои идеи, но если у вас нет идей или не имеют никакого понятия о том, как их выразить, C + + не предложит большую помощь”.
Слишком часто “компьютерные науки” является одной из форм математике зависти. Да, но, пожалуйста, не забывайте, что “слишком часто”. Цитата из контекста, в котором я беспокоиться о недостаточном внимании к данным (эмпиризм) и недостаточное внимание к связи к компьютерам. Это не фронтальное наступление на том, что информатика может быть наукой (см., например, Кнут на алгоритмы и анализ алгоритмов; это наука, и это не любая другая наука). И, нет, я не собираюсь давать конкретные примеры и имена.
Слишком часто “программного обеспечения” не является ни инженерных, ни о программном обеспечении. Да, но, пожалуйста, не забывайте, что “слишком часто”. Цитата из контекста, в котором я беспокоиться о недостаточном внимании к данным (эмпиризм) и недостаточное внимание к связи в коде. Я боюсь, что реалиями того, чтобы доставить полезный и в сопровождении код может быть утоплен в процессах, корпоративных стандартов, и маркетинговые исследования, что разработка программного обеспечения иногда находится под контролем людей, которые не могли распознать хороший код, когда он вскочил и ударил им на носу, и гордимся этим. И, нет, я не собираюсь давать конкретные примеры и имена. Если по хорошему, разработка программного обеспечения является достойным дисциплины инженерной, обеспечивая результаты, которые сравниваются с точкой зрения старше инженерных дисциплин.
Если (не когда) автоматический сбор мусора становится частью C + +, это будет дополнительным. Да в 2000 интервью с / ..
Легко выиграть прощения за то, что неправильно, а когда их права это то, что вы в реальные неприятности. Так.
Любая проблема в области компьютерной науки могут быть решены с другой уровень косвенного, известный как первый закон вычислений. Да, я сказал, что цитировании (моей докторской диссертации advison) Дэвид Дж. Уилер. Пожалуйста, не misattribute его мне.
Действительно ли вы дать интервью IEEE?
, В которой вы признались, что C + + была сознательно создана как ужасный язык для написания неподдерживаемые кода увеличить зарплаты программистов?
Конечно, нет. Прочитайте реальные интервью IEEE.
Что такое “унаследованный код”?
“Наследие код” термин часто используется уничижительно, чтобы охарактеризовать кода, написанного на языке, или стиль, который (1) динамика / писатель считают устаревшей и / или (2) конкурирует с чем-то продали / способствовала динамика / писатель. “Наследие код”, часто отличается от своего предложили альтернативу, на самом деле работает и масштабирование.
Является ли количество C + + пользователи по-прежнему удваивается каждый год?
Количество В 1980-1991, число пользователей удваивается каждые семь с половиной месяцев (см. Дизайн и эволюция C + +). Тем не менее, просто не хватает программистов для поддержания этого. С несколько цифр, я могу получить (компилятор продаж, книга продаж, объема работ консультантов, я знаю, IDC и др.), по моим оценкам, темпы роста несколько процентов. Устойчив и, безусловно, положительный. IDC оценкам, 1200000 C + + Реализации были проданы в 1996 году. Их 2001 оценка числа программистов С + + было “около 3 миллионов”, их количество составило 2004 “более 3 миллионов”. Это кажется правдоподобным и указывает на продолжение роста.
Кто-нибудь использовать C + +, в эти дни?
Так, многияробяць. Есть слишком много C + + пользователям эффективно их сосчитать, но их количество в миллионы. C + + поддерживается всеми основными производителями. Примеры C + + использовать увидеть мои приложения сэмплер.
Почему нет C + + для операционных систем?
Она есть, и она была на протяжении более десяти лет, см. мой список C + + приложений.
Вы ожидали, C + +, чтобы стать такой успех?
Конечно, нет. Успеха общего назначения языков программирования исчезающе мала. Я знал, что, и я знал, что шанс на успех повлиял маркетинга влияние, которое у меня не было.
C + + был первоначально разработан и реализован в виде набора общих средств решения некоторых конкретных проблем, которые я и мои коллеги столкнулись. Сообщества – и эффективность – из средств, предоставляемых оказалась служить гораздо шире потребностей, чем я ожидал. Акцент на общих объектов – в отличие от предоставления конкретных решений конкретных проблем – осталась с C + + и служил своего общества и конкретных проблем, стоящих перед обществом изменились за эти годы.
Что такое хорошая сертификации для программистов С + +?
Насколько мне известно, нет хорошей программы сертификации для C + + программистов. Вот жаль. Добраяпраграма сертификации будет наиболее полезным. Тем не менее, C + + не хватает центральной организации, которая будет производить жесткие программы сертификации, а также программы сертификации без разрешения или, направленную на синтаксис был бы хуже, чем бесполезно.
Что вы сейчас работаете?
FAQ лучше
Серьезно, я ищу фундаментальные пути совершенствования средств и методов, которые мы используем для построения больших реальных систем. Одна часть моей работы заключается в C + +0 х.
Что такое C + +?
С + + является универсальным языком программирования с уклоном к системам программирования,
это лучше C
поддерживает абстракцию данных
поддерживает объектно-ориентированное программирование
поддерживает обобщенное программирование
Она определяется по стандарту ИСО, обеспечивает стабильность на протяжении десятилетий, и имеет большой и живой сообщества пользователей. Смотрите также C + + Язык праграмаванняи Развитие языка в себе и для реального мира: C + + 1991-2006 гг.
Где я могу узнать историю C + +?
О дизайне C + +? Об истории C + +?
Посмотрите на мои документы для HOPL-2и HOPL-3; HOPL расшифровывается как “История Языки программирования”, премьер-министр конференции по этому вопросу, автором которого ACM. Это сильно рецензируемых работ. Для еще более подробно см. мою книгу Дизайн и эволюция C + + и предисловие до 2006 Японский перевод D & E, который приносит информацию до 2006 года. Кроме того, многие из моих интервью затронуты вопросы фон, дизайн, история C + +.
Правда ли, что …?
Многие вопросы приходят ко мне в форме утверждений
С + + является низкоуровневый (?)
C + + слишком медленный для низкоуровневой работы (?)
C + + имеет смысл только если вы пишете по-настоящему объектно-ориентированного кода (?)
Современное проектирование на С + + является все обобщенное программирование и метапрограммирование шаблонов (?)
C + + разработан Microsoft (?)
Часто, человек воспитывает один из этих пунктов считает заявление факт (но ни одно из этих утверждений верно), а иногда, есть подразумевается знак вопроса. Таким образом,
С + + является низкоуровневой? Нет. C + + предлагает и низкого уровня и высокого уровня возможностей. C + + имеет низкий уровень деталей, таких как указатели, массивы и отливок. Эти средства (почти идентично тому, что предлагает C) необходимые (в той или иной форме) для близких к-аппаратный работы. Таким образом, если вы хотите низкоуровневых средств языка, и C + + предоставляет испытанный набор средств для вас. Однако, если вы не хотите использовать низкоуровневые функции, вы не должны использовать C + + объекты (напрямую). Вместо этого, вы можете рассчитывать на более высоком уровне объектов, в том числе библиотек. Например, если вы не хотите использовать массивы и указатели, строки стандартного библиотеки и контейнеры (лучше) альтернативы во многих случаях. Если вы используете только низкоуровневых средств, вы почти наверняка тратить время и усложняет техническое обслуживание без преимущества производительности (см. Обучение Standard C + + как нового языка). Вы также можете быть настилки системы открыты для атак (например, переполнение буфера).
C + + слишком медленный для низкоуровневой работы? Нет. Если вы можете позволить себе использовать C, вы можете позволить себе использовать C + +, даже более высокого уровня объектов C + +, где нужно их функциональности. Смотрите абстракция и C + + модель машины и ISO C + + стандарты комитета Технический отчет по производительности.
C + + имеет смысл только если вы пишете по-настоящему объектно-ориентированный код? Нет. Это значит, “нет” практически для любого разумного определения “объектно-ориентированной”. C + + обеспечивает поддержку широкого спектра задач, а не только для одного стиля или на один вид приложения. На самом деле, по сравнению с C, C + + предоставляет дополнительную поддержку для очень простых задач программирования. Например, стандартные библиотеки и других библиотек радикально упрощает многие иначе утомительной и подверженной ошибкам задач. C + + широко используется для огромного приложений, но также приносит пользу даже крошечные задач программирования.
Современное проектирование на С + + является все обобщенное программирование и метапрограммирование шаблонов? Нет. C + + поддерживает несколько полезных приемов праграмаванняfont>, в том числе, традиционные процедурного программирования, объектно-ориентированное программирование и обобщенное программирование. Ни один из них лучше, чем все остальные для всех видов и, как правило наиболее эффективное решение реальной проблемы включает в себя комбинацию методов.
C + + разработан Microsoft? Нет. Я изначально разработана и внедрена C + + и вместе с ISO C + + стандарты комитета изысканный его определение. Microsoft принимает активное и в основном позитивную роль в этом стандартизация – как Apple, GNU, IBM, Sun и многие другие. Как и другие – например, Apple – Microsoft пытается помочь / блокировки в их пользователям с проприетарными расширениями (в частности, Microsoft C + + / CLI).
Что вы думаете о Boost?
Павышэннезъявляецца большой и расширяющийся набор библиотек предназначен для совместной работы с ISO C + + стандартная библиотека. Он содержит много очень полезной и хорошо продуманная библиотеки, такие как ASIO, файловой системы, регулярное выражение, и нити (извинения за не пытаясь определить более полезным библиотек; Есть только слишком много). Один библиотека, TR1, содержит хорошим приближением нового C + +0 х стандартных компонентов библиотеки.
Повышение библиотеки тестов люксов, есть документация, были протестированы на нескольких компьютерах, и рецензирование.
У меня две проблемы с Boost, хотя, который, надеюсь, будут рассмотрены в конце концов:
Это слишком сложно, чтобы загрузить и использовать только один Повышение библиотеки, библиотеки показаться чрезмерно связанной делая этот трудно выбирать.
Некоторые из библиотеки слишком умные для моего вкуса. Иногда, общности и простоты совпадают, в Boost, баланс ИМО слишком часто до сих пор по отношению к сообществу, что начинающим, так и обычных пользователей, будут потеряны.
Тем не менее, как правило, действительно глупая идея, чтобы пойти и изобретать колесо, повышающие уже предлагает.
Что вы думаете о шаблонного метапрограммирование?
Шаблон метапрограммирование набор мощных методов программирования, которые при использовании с заботой и вкусом может помочь решить довольно сложно проблемы, в основном, связанных с архитектурой больших систем, их мобильность, и их содержание (см. Абрахамс и оптовые: C + + метапрограммирование шаблона и некоторые из Повышение библиотек.
Как и все мощные методы они легко злоупотреблять. Лично я предпочитаю использовать шаблоны в первую очередь для обобщенного программирования (например, в определении контейнеров и алгоритмов над контейнерами) и шаблоны, которые генерируют достаточно очевидны код, основанный на шаблоне аргументов (например, создание буферов и зарегистрировать код доступа), что иногда называют генеративной программирования. Будьте осторожны сложности шаблонов вы пишете или использования; легко получить overenthusiastic и писать код шаблона, который является слишком умен, чтобы быть полезным в качестве поддерживаемого кода производства.
Если вам не нравится функциональных стилей программирования, вы можете найти шаблон метапрограммы трудно понять. Если вы, как функциональное программирование, вы можете найти шаблон версии немного примитивно, но помните, эти шаблоны выполняются во время компиляции.
Ресурс: Bjarne Stroustrup’s FAQ