¿Cuál es la diferencia entre estos dos casos de agregar una cadena?

Noté que cuando inicialicé una cadena, el compilador informó un error que no esperaba.

Por ejemplo:

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s1 = "Hello", s2 = "World!"; // ok
    string s3 = s1 + ", " + "World!"; // ok
    string s4 = "Hello" + ", " + s2; // error
    cout << s1 + " " + s2 << endl; //ok
    return 0;
}

Para mi sis3 funcionó biens4 Debería hacer lo mismo.

¿Por qué me sale ese error? ¿Cuál es la diferencia entre estas dos cadenas de inicialización (s3 ys4)?

Respuestas a la pregunta(5)

Su respuesta a la pregunta