2009-10-22 3 views
3

У C++ слишком много функций, и я не вижу, как любой программист может запомнить все эти функции во время программирования. (Мы можем видеть, как это повлияло на разработку новых языков, таких как Java)Возможности C++ для изучения

Итак, мне нужен список функций, которые достаточно знать, не обращая внимания на все остальные, на создание программ на C++, возможно, созданных кто-то думал так же, как и я.

Надеюсь, я был достаточно ясен.

+9

Вы потеряли меня с первым предложением. –

+1

Хотя вопрос не так ясен, как может быть, я думаю, что это разумный вопрос (хотя, возможно, он должен быть вики-сообществом). C++ невероятно сложный, и имеет смысл сузить то, из чего вы изначально хотите сосредоточиться. Например, я думаю, что изучение наивысшего качества STL гораздо более полезно, чем изучение того, как сделать свой собственный метапрограммирование шаблона (но, возможно, это потому, что я не мог TMP выйти из бумажного пакета). –

+3

Я не согласен с закрытием. Это разумный вопрос, который задают себе новые программисты на С ++. –

ответ

6

Это действительно невозможно создать список. Каждое место, на котором я работаю, имеет другое приемлемое подмножество C++. Таким образом, это будет отличаться в зависимости от того, что вы разрабатываете. Я видел C++, который поистине просто C, при случайном использовании «ключевого слова класса» для очень ориентированного на полиморфизм кода времени выполнения для тяжелого кода метапрограммирования шаблонов. Затем практика изменится в зависимости от того, какие рамки/библиотеки/платформы вы нацеливаете.

Лучшее, что я мог бы предложить, это прочитать различные стандарты кодирования и увидеть, как они предлагают вам писать код с помощью C++.

+0

«Стандарт кодирования Google» кажется тем, что я ищу, спасибо миллион! – Lawand

+5

Поскольку Google и Sutter отличаются в разных местах. Я бы пошел со стандартом Sutter, так как он в значительной степени является человеком C++ (глава C++ standard comitee (или был последний раз, когда я проверил)). –

+0

Ну, в этом случае я проверю оба до принятия решения – Lawand

12

Узнать Resource Acquisition Is Initialization.

Техника была изобретена Бьярном Страуступом для решения проблемы освобождения ресурсов в C++.

[...]

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

C++ - это объектно-ориентированный язык с такими функциями, как наследование, инкапсуляция и полиморфизм, которые также встречаются на популярных языках, таких как Java, C# и т. Д. C++ также предоставляет генерики через шаблоны. Однако на C++ вы должны явно обрабатывать освобождение памяти (т. Е. Сбор мусора). Это делает очень важным, чтобы иметь возможность выпускать ресурсы и освобождать память контролируемым образом, и именно поэтому я считаю, что RAII является очень фундаментальной концепцией на C++. Вам будет трудно понять «умный указатель», если вы не поймете RAII.

+3

Это не особенность. Это соглашение и хорошая практика. – mkb

+4

@Matt, как это не особенность? Язык либо * поддерживает *, * enable * или * запрещает использование конкретной практики. C++ поддерживает RAII явно с необходимым механизмом, а не только с задними дверями, чтобы взломать вещь, поэтому она является особенностью. – AraK

+3

Согласен с этим. Это единственная идиома, которая делает надежный код на C++ возможным *. Вините виртуальные функции, ООП, шаблоны, функторы и все остальное на языке. Их можно изучать на специальной основе, когда это необходимо. Если вы не понимаете и используете RAII, ваш код будет ошибкой, негерметичным, подверженным ошибкам беспорядок. – jalf

6

Вы узнаете и помнить о них, имея потребность в них. Я не уверен, какие «функции» вы ищете. «виртуальные функции« определенно то, что вы хотите узнать, но я не знаю вашего фона. Должен ли я предлагать полиморфизм/наследование классов тоже? Шаблонные классы/функции?

0

Я думаю, что шаблоны такая особенность ...

+0

Шаблоны - приятная функция и экономит много времени. Но сначала вам не нужно его прояснять. Его то, что вы добавляете, когда понимаете язык. –

0

У вас есть ящик для инструментов, содержащий слишком много инструментов? Тогда не используйте их все? Используйте те, которые вам нужны.

Прочтите хорошую книгу с передовыми методами и шаблонами проектирования C++.

0

Не будьте слишком спеша, чтобы овладеть языком.Питер Норвиг (из Google) утверждает, что для получения мастерства на что-то требуется около 10 years.

+0

Возможно, мой вопрос был не столь ясен. Я не спешу владеть С ++. Я просто хочу сначала освоить подмножество языка, а затем перейти к другим деталям. – Lawand

Смежные вопросы