strtof float convertir cadena c++ string function

c++ - float - strtof



C++ pasar una cadena (7)

Pregunta rápida, probablemente obvia.

Si tengo:

void print(string input) { cout << input << endl; }

¿Cómo lo llamo así?

print("Yo!");

Se queja de que estoy pasando char *, en lugar de std :: string. ¿Hay una forma de encasillarlo, en la convocatoria? En lugar de:

string send = "Yo!"; print(send);

Gracias.


Asegúrese de que su función acepte const std::string& lugar de by-value. Esto no solo evita la copia y, por lo tanto, siempre es preferible al aceptar cadenas en funciones, sino que también permite al compilador construir una std::string temporal std::string del char[] que le está dando. :)


Bueno, std::string es una clase, const char * es un puntero. Esas son dos cosas diferentes. Es fácil pasar de una string a un puntero (ya que normalmente contiene uno que simplemente puede devolver), pero para la otra forma, necesita crear un objeto de tipo std::string .

Mi recomendación: las funciones que toman cadenas constantes y no las modifican siempre deben tomar const char * como argumento. De esa manera, siempre funcionarán, tanto con literales de cadena como con std::string (a través de un c_str() implícito).


Debería poder llamar a print ("yo!") Ya que hay un constructor para std :: string que tiene un carácter constante *. Estos constructores de argumento único definen las conversiones implícitas de sus documentos a su tipo de clase (a menos que el constructor se declare explícito, lo que no es el caso de std :: string). ¿Realmente has intentado compilar este código?

void print(std::string input) { cout << input << endl; } int main() { print("yo"); }

Se compila bien para mí en GCC. Sin embargo, si declara impresión como esta void print(std::string& input) , no se compilará, ya que no puede enlazar una referencia no constante a una temporal (la cadena se construirá a partir de "yo").


La forma obvia sería llamar a la función como esta

print(string("Yo!"));


Puedes escribir tu función para tomar una const std::string& :

void print(const std::string& input) { cout << input << endl; }

o una const char* :

void print(const char* input) { cout << input << endl; }

Ambas formas te permiten llamarlo así:

print("Hello World!/n"); // A temporary is made std::string someString = //... print(someString); // No temporary is made

La segunda versión requiere que se c_str() para std::string s:

print("Hello World!/n"); // No temporary is made std::string someString = //... print(someString.c_str()); // No temporary is made


Sólo tienes que lanzarlo como un const char *. print ((const char *) "Yo!") funcionará bien.


print(string ("Yo!"));

Necesitas hacer un objeto std::string fuera de él (temporal).