なぜ文字列パラメータへのconst参照は文字列リテラルを取ることができますか? "hello"
のような文字列リテラルは変数ではないので、なぜこのコードは有効ですか?なぜ文字列パラメータへのconst参照は文字列リテラルを取ることができますか?
class CVector {
public:
int x, y;
CVector() {};
~CVector() { delete ptr; }
string* ptr;
void doSomething(const string& str) { ptr = new string(str); }
void print() { cout << "\n" << *ptr; }
};
int main()
{
result.doSomething("asdas");
result.print();
return 0;
}
まず第一に、私はパラメータとして参照がコピー処理を避け、直接引数として取る変数にアクセスするために使用された(私はまだかかわらず、正しいかもしれない)と思いました。しかし、文字列リテラル "asdas"は変数ではないので、なぜパラメータが文字列リテラルを引数として取ることができますか?私はパラメータstr
が参照であるので、そのエンティティのエイリアスになるでしょうか?もしそうなら、文字通りは変数になりましたか?
const参照の代わりにstring& str
で構成されていないと、リテラルはstr
の構成で使用されますか?
参照が存続している限り、const参照は参照されたエンティティを生かしていませんか?もしそうなら、なぜあなたはそれを文字通りにしますか?
単純に言えば、文字列リテラルをとり、文字列インスタンスを作成する変換(つまりctor)があります。 – Kobi