C++ の経験がある人なら簡単に答えられると思われる質問がいくつかあります。TL;DR の質問は太字にします。
次のコードがあるとします。
void stringTest(const std::string &s)
{
std::cout << s << std::endl;
}
int main()
{
stringTest("HelloWorld");
}
うまくいけば、誰かがここで私の思考プロセスの誤りを指摘できます:
C スタイルの文字列を渡すときに、stringTest のパラメーターを const とマークする必要があるのはなぜですか? その cstyle 文字列コンストラクターを使用して行われる std::string への暗黙的な変換はありません。したがって、「s」はリテラルへの参照ではなくなります (const である必要はありません)。
さらに、 cstyle 文字列コンストラクターはどのように見えるでしょうか? また、コンパイラーは を見てこれを呼び出すことをどのように認識していますか?
stringTest("HelloWorld");
文字列リテラルを単に char* のようなものとして認識しますか?
コピー コンストラクターを研究しているときに、これらの質問に出くわしました。私自身の明確化のための別の簡単な質問...
次のような場合:
std::string s = "HelloWorld";
cstyle 文字列コンストラクターを使用して一時的な std::string をインスタンス化し、文字列コピー コンストラクターを使用して一時的な文字列を "s" にコピーしますか? :
std::string(const std::string&);