string, const string, and String are all very different data types (none of which should be confused with string literals ("quoted text")).
string is referred to as an "old-style" string. It is internally defined as a char (array of 200 chars) with some special provisions. String literals cannot be implictly converted to a string, you must use StrCopy, StrCat, etc. A string can be passed as a parameter to a function expecting a const string, but not the other way around.
const string is an old-style string with some special provisions. Specifically its value is constant, and cannot be changed by functions such as StrCopy or StrCat. As a const string is an old-style string, you must use old-style string commands when working with it (such as StrLen). String literals can be implicitly converted to a const string (that is, you can pass a string literal as a parameter to a function expecting a const string). A const string can be implicitly converted into a String (such as during assignment).
String is a new-style string. It can be passed as a parameter to functions expecting a const string or String, but not string. String literals and const strings can be implicitly converted to String. A String does not use the old-style string commands, but instead uses the new-style string properties and functions (such as String.Copy, String.Append, String.Length, etc.).
The only reason you need to use string/const string is if you're interoperating with legacy code. 2.71 was SEVERAL versions ago, so short of very long-term projects that have been around since before that time, most games should not be using old-style strings. There is no benefit behind using old-style strings vs. new-style strings (arguably of course, as everything can be a matter of opinion).