Sé que es un problema común, pero buscando referencias y otro material no encuentro una respuesta clara a esta pregunta.
Considere el siguiente código:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
El compilador me dice que no puede encontrar un operador sobrecargado para char[dim]
.
¿Significa que en la cadena no hay un operador +?
Pero en varios ejemplos hay una situación como esta. Si esta no es la forma correcta de concanear más cadenas, ¿cuál es la mejor forma?
Respuestas:
Su código, tal como está escrito, funciona. Probablemente esté tratando de lograr algo no relacionado, pero similar:
std::string c = "hello" + "world";
Esto no funciona porque para C ++ parece que estás intentando agregar dos
char
punteros. En su lugar, debe convertir al menos uno de loschar*
literales astd::string
. O se puede hacer lo que ya se haya publicado en la pregunta (como ya he dicho, este código será trabajar) o de hacer lo siguiente:std::string c = std::string("hello") + "world";
fuente
const char[]
, en lugar destd::string
. En C (y por lo tanto también en C ++) las matrices se convierten en punteros muy fácilmente, por lo que "a" + "b" invocará el operador incorporado que agrega dos punteros. El resultado de eso (un puntero apuntando a algún lugar de la memoria) es, por supuesto, bastante inútil, pero, sin embargo, esto es lo que nos atasca.std::string c = "Hello" "world";
, por ejemplo, resultará enc == "Helloworld"
.std;:string c = "hello"s + "world"s;
o simplemente hacer que uno de ellos sea unstd::string
.std::string a = "Hello "; a += "World";
fuente
Yo haría esto:
std::string a("Hello "); std::string b("World"); std::string c = a + b;
Que se compila en VS2008.
fuente
std::string a = "Hello "; std::string b = "World "; std::string c = a; c.append(b);
fuente