First of all, let me first clarify that the thoughts below are purely my personal opinions and because of my limited knowledge. I have no intention of saying that C ++ is not cool.
I programmed C ++ as a year, and I think it really has interesting features. However, I feel a little empty and disappointed, because in fact I have not studied any “mind-altering” things with C ++, from the point of view of a person who previously studied Java (as the 1st language).
According to many posts I read, people prefer C ++ as it is faster. For a programmer like me who has not previously been programmed with temporary critical applications, I still have a chance to appreciate this.
So far, what I learned seems to be about the syntax. So we write a class in Java, but here's how to write it in C ++. This is how to do inheritance in Java and what to do in C ++ and so on. (I know multiple inheritance is cool, but for me it's not a mind-altering thing. I think it's great to be able to answer why Java does not / cannot support multiple inheritance, which should be more general than single inheritance).
Somehow to me all these are just syntaxes, and my mind doesn't seem to have developed after C ++ coding. I think my problem is to write C ++ programs using Java-mind. What I really want, as many people suggest, is to change my thoughts about thinking after learning a new language. I still do not understand what is happening with my C ++.
I can also write a couple of small Python programs. However, I am afraid to learn more about this, as I am, again, it will just be learning a new syntax, a new way to do things that are just different, not knowing the reason.
I plan to learn C to really get to know things. I think it will be a pretty "involving" language.
Let me know what you think and please give me advice.
PS: By the way, in C ++ there is one specific question that I want to confirm. In C ++, writing as follows is inefficient if I am right:
private A computeAndReturnA(){...}
Instead, write it as:
private void computeAndReturnA(A& a){...}
as in the first case, the returned values ​​are copied (when we assign b = compute ...) and introduce some inefficiencies? (In Java, I assume that the first method is clear in meaning and good in efficiency, as it passes things by reference)