Language will get significantly more convoluted if you make it to templates and lambda functions.
I’d like to elaborate a bit on my previous post.
Here’s silly example:
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T, typename T2> void fill(T &arg, T2 func){
std::generate(arg.begin(), arg.end(), func);
}
int main(){
std::vector<int> tmp(10);
int i = 0;
fill(tmp, &](){return i++;});
std::for_each(tmp.begin(), tmp.end(), ](int &arg){
std::cout << arg << std::endl;
});
}
That require C++11 compliant compiler, MSVC should be able to handle that, though.
Also, C++ include standard library which contains such amazing things as std::future, std::algorithm, etc. Those are template-based and they can be used on any type that meets requirements. Templates allow you to do arcane things like template metaprogramming and they distance you from low-level ideas like looking at memory directly. hen there’s also inconsistency regarding support of features in the latest C++ standard. For example, msvc used to have the worst C++11 support(IIRC they were missing custom literals, utf8/unicode strings and a lot of other stuff), although it seems that things are improving in VS2015. At some point you’ll dive into C++ standard and learn about “undefined behavior” and might turn into language lawyer. Then the committee will release next version of language, and you’ll need to relearn half of it.
The foundation of the language require at least one 1000+ page introduction/reference book(Bjarne stroustroup’s books works for that) that you’ll read and keep as nearby reference and (optionally) 1300+ page language lawyer book that describes language so you can always decide what is defined and what is undefined behavior, then you’ll need to spend few years to wrap your head around that. The amount of tools is immense and there’s large number of ways to use and misuse them, that’s why you’re gonna need the amount of time listed.
That is why I said that expecting to know foundations is unreasonable. Payoffs are big, and language rewards discipline, but not every person has this kind of time.
Judging by what I saw in UE engine and its documentation in the short time I spent using it, it seems that UE4 programming team put significant effort into making the language accessible to people with less C++ experience, so you should use facilities that were specifically designed to make people’s lives easier.
Which means, when your goal is to make games, you should make games instead of studying C++ “till you are ready”. You are never going to be completely ready, and there always will be more information to learn.
So, when the goal is game-making, people should use C++ as if it were a scripting language.