C++ being an object oriented language has the potential to iron out the issues that C cannot address well. Thus it is possible to develop a class template for matrices (two dimensioned arrays) that can create arrays with sizes that can be decided at run time and change them if need be, again at run time. It is also possible to define the start index of the matrices at run time. With its ability to overload operators, it is also possible to define operations on the matrix class. Thus, the user defined class begins to resemble a bult-in type and thus brings down the learning curve for those intending to use the class. But it too has its drawbacks. The class template can only create two dimensioned arrays but not multi-dimensioned arrays. And their performance is said to be inferior compared to what Fortran compilers can achieve.
However, both these problem can be overcome by using expression templates and there are a few libraries that do exactly that. Some of them are: