Ich habe den folgenden Code, der ohne Warnungen kompiliert (-Wall -pedantic) mit g ++C++ Übergabe eines String-Literals anstelle einer 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;
}
Aber wenn ich es laufen, wird nur das Newline ausgedruckt. Was ist los?
Wenn ich diese innerhalb Sachen tun war:
string temp("snoop");
Foo f(temp);
f.print();
dann funktioniert es gut!
Prost, weiß nicht, warum mein Gehirn das nicht bekam: s –
Es hat keinen Sinn, einen konstanten Wert als Parameter zu nehmen. Verwenden Sie einfach 'std :: string'. –
@MilesRout Das stimmt nicht ganz. Möglicherweise wissen Sie, dass Sie die Zeichenfolge nicht ändern möchten, und indem Sie sie als const deklarieren, können Sie dem Compiler bestätigen, dass Sie dies nicht tun. – Erik