私はグラムと警告なし(-Wall -pedantic)++C++は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;
}
しかし、私はそれを実行したときに、唯一の改行がプリントアウトされてコンパイルし、次のコードを持っています。 何が起こっているのですか?私は、この内部のものを行うとしたら
は:
string temp("snoop");
Foo f(temp);
f.print();
は、それが正常に動作します!
私の脳がそれを得ていない理由を知りません:s –
パラメータとしてconst値をとっている点はありません。 'std :: string'を使用してください。 –
@MilesRoutそれは全く真実ではありません。文字列を変更したくないことを知っているかもしれませんし、constを宣言することで、コンパイラがそうでないことを確認できるようになります。 – Erik