When a shader source inside a C++ string is modified, then the C++ source will be recompiled.
On the other hand, if the shader source is in a separate file, which is loaded at runtime, then no recompilation will be triggered.
As a consequence, CPU-code and GPU-code will be separated, which is a big plus.