ポインタと参照についてはまだよくわからないのでさっさと本題にいきます。 私がC++を書いてて困ったのが、ポインタ渡しと参照渡しの使い分けです。 引数の参照渡し(call by reference)とは、メソッドを呼び出す際に値の参照情報を渡すことを言います。 C# では、ref引数、in引数、out引数という3種類の参照渡しがあります。 「参照型は参照渡しだけど、String 型だけは値渡し」説!? 参照渡し説を取る人たちの中でも、「String 型は参照型だけど呼び出し元で値を変えられないから、String 型だけは値渡し」という派閥があ … 参照型の値渡し(参照情報の書き換え) 参照型の値渡し(参照先の書き換え) 参照渡しの引数. そもそも、参照渡しという言葉も良くなくて「参照先の値渡し」が正しいですし、そう唱えている人も他にも居ます。 Javaはあまり知らないが、C言語とC++は得意という人に聞いたら「これは値渡しだ」と断言していました。面白いですね。 StringとかIntegerとか… C++では関数からstd::stringを皆はどうやって返してんだろうっていう疑問がわきました。 フツーに考えてstd::stringをそのまま値で返す一択なのですが、 ポインタと参照についてはまだよくわからないのでさっさと本題にいきます。 私がC++を書いてて困ったのが、ポインタ渡しと参照渡しの使い分けです。 そもそも、参照渡しという言葉も良くなくて「参照先の値渡し」が正しいですし、そう唱えている人も他にも居ます。 Javaはあまり知らないが、C言語とC++は得意という人に聞いたら「これは値渡しだ」と断言していました。面白いですね。 StringとかIntegerとか… 可能な重複: const std :: string&をパラメータとして渡す日はありますか? move semanticsがサポートされている場合は、 std::stringを値渡しまたは参照(un-inlined関数)に渡す必要がありますか?そして、小さな文字列最適化(SSO)を使った実装はどうでしょうか? class String { char & operator [](int index); }; 参考: A History of C++: 1979− 1991. 参照型の値渡し(参照情報の書き換え) 参照型の値渡し(参照先の書き換え) 参照渡しの引数. >stringは参照型といいながら、実際の動作は値型のようなきがしてなりません。 この言葉は的を射てますね。 その通りです。値型のような動きをする参照型です。 string a = "1"; string b = a; string c = b; a,b,c 自体には、"1への参照が入っています。 『もう参照渡しとは言わせない』の記事を完全に読み誤っているようです。Javaのいわゆる『参照渡し』(正確には参照の値渡し)はどちらかと言うとポインタ渡しに近いですし、記事ではStringが特殊であることを否定しています。 引数の参照渡し(call by reference)とは、メソッドを呼び出す際に値の参照情報を渡すことを言います。 C# では、ref引数、in引数、out引数という3種類の参照渡しがあります。 C++では関数からstd::stringを皆はどうやって返してんだろうっていう疑問がわきました。 フツーに考えてstd::stringをそのまま値で返す一択なのですが、 class String { char & operator [](int index); }; 参考: A History of C++: 1979− 1991. 『もう参照渡しとは言わせない』の記事を完全に読み誤っているようです。Javaのいわゆる『参照渡し』(正確には参照の値渡し)はどちらかと言うとポインタ渡しに近いですし、記事ではStringが特殊であることを否定しています。 >stringは参照型といいながら、実際の動作は値型のようなきがしてなりません。 この言葉は的を射てますね。 その通りです。値型のような動きをする参照型です。 string a = "1"; string b = a; string c = b; a,b,c 自体には、"1への参照が入っています。