Tengo el siguiente código que compila sin advertencias (-Wall -pedantic) con g ++C++ pasando un literal de cadena en lugar de un const std :: string &?
#include <iostream>
#include <string>
using namespace std;
class Foo
{
public:
Foo(const std::string& s) : str(s)
{ }
void print()
{
cout << str << endl;
}
private:
const std::string& str;
};
class Bar
{
public:
void stuff()
{
Foo o("werd");
o.print();
}
};
int main(int argc, char **argv)
{
Bar b;
b.stuff();
return 0;
}
Pero cuando corro, sólo el salto de línea se imprime. ¿Qué está pasando?
Si tuviera que hacer estas cosas en el interior:
string temp("snoop");
Foo f(temp);
f.print();
entonces funciona bien!
aplausos, no sé por qué mi cerebro no entendía eso: s –
No tiene sentido tomar un valor de const como parámetro. Solo usa 'std :: string'. –
@MilesRout Eso no es del todo cierto. Tal vez sepas que no quieres modificar la cadena, y al declararlo, permites que el compilador verifique que no. – Erik