The general rule of thumb of using C and C++ , is DON’T
both C and C++ are horrible langauge for different reasons , C lacks OOP , C++ has a terrible OOP implementation, both are doing manual memory management.
Learning languages is easy, that applies to C and C++ , it usually take a few weeks max to learn enough to be dangerous but using them is another matter altogether. The problem with those 2 languages is that they leave memory managments to the hands of coder which is disaster waiting to happen. People make mistakes, memory leaks happen. However the problem with memory leaks is that are notoriously difficult to fix. The reason is that a memory leak is still valid code, so there is no error from the compiler , the only thing it does is crashes the app. Finding memory leaks is a pain in the ***.
C lack of OOP is a problem, Object Orientated Programming is not the holy grail but it does excel at managing big complex code, so its not a surprise that large enough C apps tend to implement their own kind of OO, just way more…well… frankesteinish
C++ does have OO but since its designer never understood what OOP is all about, and being also a really bad designer, hence C++ had several revisions to compensate for these problems, which end up making the language looking even more horrible.
However C, C++ are extremly popular language because they were created in a time period that people were still coding in Assembly. Performance back then was extremely important , with processors not exceeding 40mhz C and C++ became popular because well, they looked better than Assembly. Of course everything looks better than Assembly , but lets ignore that for now. Nowdays we dont need performance orientated languages because we have quad cores at 3 ghz and GPUs that can outperform them 10 times.
But since 3d graphics tend to push the envelope even on a quad core, it stand to reason why C++ is the defacto language for high end 3d games.
The good news is that Unreal has gone to great lengths to improve the C++ experience by adding GC which makes manual memory management a lot less necessary and with improving OOP through reflection which is a standard feature for every self respect OOP language. So Unreal C++ is not that terrible but its still C++.
So, what happens in this cases is this, a coder generally , even when it comes to performance crtitical code will prefer the easiest to use language, he then profiles the code so he can pipoint down to micro and nano second how much time each line of code consumes and when he find that some code is slow he will do the following:
a) Make sure its not his fault, and if it is he will optimize the code, usually that means dont do any uneccessary computions or a lot of I/O but there are many other ways to optimise too
b) If its language problem (interpretation , VM startup, GC , dynamic types etc) then he will move the code to C++ and call that code back to the easy to use language which preferably is dynamic one.
In case of Unreal that easy to use language is Blueprints, not as good as python , lisp and smalltalk, but its ok and being visually its more attractive to non coders though for the wrong reasons.
So the rule of thumb here is use as much Blueprints as you can and only when its absolutely neccessary move to C++. Of course never forget to do the 3 important steps:
a. Profile
b. Profile
c More Profile
C# is doing a better job than Unreal C++ in terms of OOP , GC and ease of use but still nowhere close to Blueprints.
If you absolutely look for C++ alternative, I have not tried it but Unreal.js seems ok, javascript is no beauty either but next to C++ she looks like a super model.
But yeah even if you are a pro coder, stick to Blueprints. You will be far more productive.