Я не думаю, що причина пов’язана настільки з продуктивністю, скільки зі сумісністю. Мова С ++ є більш складною, ніж мова С, але з точки зору продуктивності не повинно бути помітної різниці в будь-якому випадку. Деякі конструкції C ++ швидші за еквівалент C ( std::sort
швидше ніж qsort
), і, мабуть, є хороші приклади навпаки.
РЕДАГУВАТИ: Що стосується взаємодії ...
В основному стандарт C ++ не визначає деяких речей, які можуть знадобитися для зручності взаємодії між двійковими файлами, створеними за допомогою різних компіляторів / версій. Найбільш помітним питанням тут було б узгодження імен символів у двійковому файлі. На мові C мова визначає єдине відображення кожного символу в коді до імені двійкового символу. Функція, що викликається my_function
, створить символ у двійковому файлі, що викликається my_function
. З іншого боку, і через такі функції, як перевантаження функцій, імена функцій C ++ повинні бути зіпсовані(переведено у різні символи функції у двійковому файлі, кодуючи типи аргументів та типи повернення), а стандарт не визначає, як виконується манґлінг. Це, в свою чергу, означає, що одну і ту ж функцію в C ++ можна скомпілювати до різних символів залежно від компілятора (якщо extern "C"
це не використовується для примусової сумісності C для цих функцій у C ++).
Зрештою, інтерфейс між мовою сценаріїв та власним кодом у будь-якому випадку повинен бути інтерфейсом C, навіть якщо деталі того, як він реалізований внутрішньо, можуть бути C / C ++ / будь-якою іншою рідною мовою.
(Я навмисно не хочу вступати у полум’яну війну мовних приставок, С ++ дійсно потужний, але він також трохи страшний, оскільки це набагато складніша мова, ніж С, і деякі речі, які виглядають простими, можуть вплинути на продуктивність)