2010-06-18 3 views
8

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

+7

Что вы Обоснованием для определения подмножества C++? Почему бы просто не использовать функции, которые помогут вам, и оставить в покое те функции, которые этого не делают.Это потенциально большая работа для определения согласованного подмножества функций; какая прибыль? –

+1

Не очень-то, мне было просто любопытно, действительно ли это было определено. Мне нравится держать вещи легко интерфейсными с C и Fortran, и я хотел, чтобы мнения других людей касались некоторых особенностей языка. –

ответ

3

Embedded C++. Это звучит в основном похоже на то, что вы ищете.

+3

Встроенный C++ никогда не попадал; после того, как вы сильно удалили язык, у него нет преимуществ перед C. –

+2

@Mike, некоторые утверждают, что это никогда не делалось. –

0

Ну, последние разработки (TR1, C++ 0x) в C++ сделали его очень универсальным, что позволило вам выполнять обязательное, ООП или даже (ограниченное) функциональное программирование на C++. Библиотеки, такие как Boost, также позволяют делать метаданные с использованием метаданных с использованием метаданных.

Я думаю, что Boost - это первое, что нужно попробовать на C++. Это комплексная библиотека, которая также включает в себя несколько модулей, которые позволяют вам программировать в функциональном стиле (Boost.Functional) или делать декларативное метапрограммирование во время компиляции (Boost MPL).

+3

Подмножества, а не надмножества. –

+0

Ну, это зависит от того, что вы называете множеством - если только STL, то Boost - это суперсет. Но я имел в виду, что Boost.Functional и Boost.MPL являются подмножествами C++ в качестве языка. –

+0

Я первоначально имел в виду подмножество, как в подмножестве самих языковых функций. У Boost, кажется, требуется очень полный набор возможностей C++. –

2

Разработчики GCC могут позволить некоторые возможности C++. Я пока не знаю каких-либо официальных рекомендаций, но я уверен, что они определит некоторые. Посмотрите на initial report в списке рассылки.

3

Незадолго до этого я слушал этот подкаст SE-Radio - Episode 152: MISRA with Johan Bezem, который вводит стандартные инструкции MISRA для C и C++ для обеспечения лучшего качества, попробуйте посмотреть на него.

3

Google публикует свое внутреннее руководство по стилю C++, которое часто называют таким подмножеством: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml. Бен Maurer, чья компания рекапчи была приобретена компанией Google, описывает его следующим образом in this post on Quora:

Вы можете в основном думать о подмножестве Google, C++ как C плюс немного сахара:

Возможность добавления методы для структур

Основное одиночное наследование.

Сбор и строковые классы

Область управления ресурсами на основе.

Они также издают инструмент пуха, cpplint.py.

-1

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

Ограничения на C: SIMD programming languages

Немного по теме: Вот хорошая дискуссия по сравнению с OpenCL CUDA с использованием C. OpenCL or CUDA Which way to go?

+0

Моя точка зрения, что OpenCL ограничивает то, что вам разрешено использовать в C и C++. Многие функции удалены или не поддерживаются или предоставляют ограниченную поддержку. Тем не менее, эти подмножества этих языков по-прежнему весьма полезны и позволяют писать всевозможные симуляции и программное обеспечение для использования на GPGPU, DSP, FPGA и многоядерных процессорах. – Max

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