4 ms·
> Java is basically a subset of C++ with some sugar around. Not sure where you got that from... the notion of a class being a "reference type", which is the fo
by wfunction 11y ago
> Java is basically a subset of C++ with some sugar around.
Not sure where you got that from... the notion of a class being a "reference type", which is the foundation of Java, doesn't even exist in C++. Every class type is a value type in C++.
- MereInterest 11y agoSure, it does. In C++, you can declare everything on the heap, then pass pointers by value. In Java, you declare everything on the heap (because you can't declare it anywhere else), then pass pointers by value (because you can't pass classes in any other way). The only difference is that Java's subset also does not include pointer arithmetic, so this is actually a safe coding practice, because it allows for garbage collection to be performed.
- wfunction 11y agoYou're not countering the same claim I'm making. Yes, C++ can emulate what Java is doing, but no, that's not what I'm saying. I'm saying C++ classes are not reference types, i.e., every class you define is always a value type, which is the exact opposite of Java. Obviously C++ also has pointers/references that could help you emulate Java, but that's beside the point. The point is that classes work differently in C++ and Java, and neither functionality is a subset of the other.
- MereInterest 11y agoI suppose I'm not seeing the difference between Java's restriction of only using reference semantics, and C++'s option of using reference semantics. Since Java only provides reference semantics, while C++ allows both reference semantics and value semantics, this would make Java be a subset of C++, in this regard.
- vbezhenar 11y agoYou can always declare something like: class MyClass_ { ... } typedef MyClass_ *MyClass; and you have identical "reference" semantics in C++. Of course you have to use `->` instead of `.`, but does it matter?