I tak i nie…
C++ nie jest wolniejszym językiem. Wszystko to, co możesz zrobić w bardzo wydajny sposób w C, możesz zrobić identycznie (albo z drobnymi poprawkami) w C++. Wiele z tych rzeczy można zrobić dodatkowo ładniej.
Nowinki składni C++ to w znacznej mierze lukier na to, co można zrobić naokoło w C, tak więc używanie jej nie może być wolniejsze. Przykładowo, wywołanie metody klasy w C++ jest de facto tym samym, co wywołanie funkcji w C, gdzie pierwszym argumentem jest wskaźnik na przetwarzany obiekt struktury.
Faktycznie narzut pojawia się przy tych możliwościach C++, które albo dają większe możliwości od swoich odpowiedników w C, albo w ogóle nie mają odpowiedników. Ot, choćby strumienie wejścia/wyjścia w C++ są wolniejsze, ale dają też większe bezpieczeństwo. Jeżeli nam zależy na szybkości, korzystamy z biblioteki C i prędkość zachowujemy. Funkcje wirtualne są nowinką mającą swoje narzuty, ale implementacja czegoś podobnego w C darmowa też by nie była (a ile roboty).
Testy które podałeś nie są wiarygodne, pisane ewidentnie pod C. Choćby Hello World na którym C ma taką przewagę - porównajmy źródła:
Kod C:
/* The Computer Language Benchmarks Game
* http://shootout.alioth.debian.org/
* contributed by Joe Tucek 2008-03-31
*
* Tell G CC that we don't want atexit, we don't want to use the heap,
* and we really don't want anything. Can't even call write the "normal"
* way, because write() isn't linked in....
*
* Compile flags are picky for this. I used:
* g cc -pipe -Wall -O3 -fomit-frame-pointer -march=pentium4 -ffreestanding -nostartfiles -s -static -o start3 start3.c
*/
#include <sys/syscall.h>
#include <unistd.h>
int _start() {
syscall(__NR_write, 1, "hello world\n", 12);
syscall(__NR_exit, 0);
return(0);
}
Kod C++:
// -*- mode: c++ -*-
// $Id: hello.1.gpp.code,v 1.1 2008-08-06 18:34:19 igouy-guest Exp $
// http://shootout.alioth.debian.org/
#include <iostream>
using namespace std;
int main() {
cout << "hello world" << endl;
return(0);
}
To ma być niby równoważne?
Jakbym tak przekleił kod z C do C++, a w C zrobił metodą standardową, to nie zdziwiłbym się, gdyby wyniki się odwróciły.
Ja sam nie bardzo widzę powody, dla których ktoś miałby używać C, jeżeli ma możliwość użycia C++. C++ pozwala zrobić to samo i wiele więcej,