el.pescado pisze:Właśnie zgodność na poziomie źródłowym z C uważam za dużą wadę C++. W ten sposób wprowadza się niepotrzebne dublowanie funkcjonalności. I tak mamy referencje, wektory, typ string, szablony, które niby zastępują stare i szatańskie wskaźniki, tablice, tablice znaków i makra. Tyle, że te drugie wciąż są niezbędne do programowania (już choćby głupia funkcja main przyjmuje wskaźnik to tablicy tablic znakowych - wykorzystuje trzy "przestarzałe" rozwiązania), przez co robi się niepotrzebny bałagan.
Wskaźniki (fakt, że osoby nie potrafiące się nimi posługiwać lepiej, żeby ich nie dotykały) to jedna z tych rzeczy, które są niesamowicie praktyczne (referencja != wskaźnik, a zastępuje tylko część jego funkcjonalności, i została stworzona tylko po to, żeby nie trzeba było podawać &zmienna w parametrach funkcji (jest ładniej, ale rozpoznaj potem, że bez patrzenia na deklarację funkcji, który parametr jest modyfikowany przez funkcję) - ofc wszystkie zastosowania wskaźnik na wskaźnik odpadają, bo nie może być referencji na referencję), tablice również to więcej niż wektory (wektory to specyficzny przypadek tablic gdzie nie wiadomo jaki jest rozmiar i trzeba dynamicznie realokować - czyli tracić wiele czasu (dlatego w każdym języku tablice muszą być - w javie również)), string to też "tablica znaków"... tylko opakowana w klasę i tylko porównywanie i działanie na nich jest wolniejsze (tak jak wektory nie zna się ilości znaków i dodatkowo, nie jest to zwykła tablica znaków (stąd cudzysłów), bo znaki nie są poukładane w kolejności tylko porozrzucane po pamięci), makra to też rzecz super praktyczna... ale jeśli mówisz, że są niepotrzebne to pewnie znasz je tylko ze strony definiowania stałych ;]. Swoją drogą chciałbym się dowiedzieć co zastąpiły szablony?
Te rzeczy które wymieniłeś nie mają zastępników w C++ tylko rozszerzenia, do specyficznych rzeczy i te "stare" rzeczy nie zostały w c++ z powodu kompatybilności, a ze względu na użyteczność języka (oraz to, że tak (jak tablica) wygląda pamięć ram czy dane na dysku, a kończąc na tym, że wektory, stringi, listy, mapy do działania potrzebują tablic... więc gdyby ich nie było to nie można by kompilatora C++ kompilować w C++).
Niepotrzebny bałagan zrobiłby się gdyby tego nie było - do wielu rzeczy potrzeba byłoby kilka kompilatorów (do części kompilator C++, do części C)/wstawki z asm.