Skrivet av perost:
Varför skulle man sätta s_ före en variabel i C eller C++? Det låter som att du sett kod som använder ungersk notation och kopplat ihop det med C/C++ av någon anledning. Men i C/C++ får du namnge dina variabler hur du vill (med vissa tekniska begränsningar förstås), precis som i Java. Ungersk notation är något de flesta rekommenderar att inte använda, inklusive skaparen av C++ Bjarne Stroustrup.
Att inte koda typen som del av namn finns numera även med i CppCoreGuidelines, regel NL.5.
Vidare så har C och C++ divergerat rejält som språk, att idag klumpa ihop C med C++11 och senare är ungefär som att klumpa ihop Pascal och Java. Alla dessa må vara olika imperativa språk, men modern C++ har väldigt lite gemensamt med C!
Java:
static void printPersonsOlderThan(List<Person> roster, int age) {
for (Person p : roster) {
if (p.getAge() >= age) {
p.printPerson();
}
}
}
C++11
// finns även list<> i standard C++, men i 99 fall av 100 är vector<> bättre
static void printPersonsOlderThan(vector<person> roster, int age) {
for (auto p: roster) {
if (p.getAge() >= age) {
p.printPerson();
}
}
}
Fast detta blir lite mer komplicerat i Java, C++17
tuple<int, string> functionReturingTwoThings();
void someFunction() {
auto [some_int, some_string] = functionReturningTwoThings();
... // use "int some_int" and "string some_string"
}
Och om man har rena funktioner (som i matematisk rena) i C++11 så kommer de evalueras direkt vid kompilatortillfället om det är möjligt, d.v.s. argumenten har kända värden när det hela kompileras. DET är riktigt coolt, för att inte tala om att det körs riktigt snabbt!
Direktöversättning av definitionen av Fibonacci-serien till funktioner (väldigt dålig algoritm tidskomplexitetsmässigt)
Java (restriktion i Java, finns ingen anledning varför man ska använda signed int här, men unsigned int finns inte!)
int fib(int n) {
if (n < 2) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
C++17
constexpr unsigned fib(unsigned n) {
if (n < 2) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
En anrop med konstant 45 tar på min jobblaptop (i7-5600U) 4,9 s i Java medan det är omedelbart i C++ då kompilatorn ersatt anropet med dess matematiska resultat.
Och inte ett s_ i sikte trots C++ exempel
Som Herb Sutter gjorde en gång en presentation med titeln: "Not your fathers C++". Har man inte titta på C++ på ett par år så vet man överhuvudtaget inte hur det ser ut idag. C++11 och senare är på många sätt ett nytt språk även jämfört med tidigare C++ (och sättet man programmerar har definitivt förändrats)!