teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

訂正

2016/03/20 13:52

投稿

catsforepaw
catsforepaw

スコア5944

answer CHANGED
@@ -7,3 +7,8 @@
7
7
  ---
8
8
  追記
9
9
  C#では引数で結果を受け渡しする際に、`ref`や`out`を付けて参照渡しにすることができます。その場合は書き換わることが明確に判断できます。
10
+
11
+ ---
12
+ 訂正
13
+ raccy さんの解説により、破壊的メソッドの意味を勘違いしていたことが判りました。
14
+ C++ではメソッドの後ろに`const`を付けることで、そのメソッドはオブジェクトを変更しないということを明示することができるので、少なくとも「変更しない」ことは判断が付きます。

1

追記

2016/03/20 13:52

投稿

catsforepaw
catsforepaw

スコア5944

answer CHANGED
@@ -2,4 +2,8 @@
2
2
 
3
3
  C/C++では基本値渡しで、ポインタまたは参照でconstが付いていない場合はオブジェクトが書き換わる可能性がある、というように関数プロトタイプによって判断できますので、それが区別といえば区別になるかもしれません。別な言い方をすれば、C/C++では、引数に渡したオブジェクトを変更可能にしたい場合は、そのように記述する必要があるということになります。
4
4
 
5
- C#は少々曖昧ですね。C#は構造体オブジェクトは値渡しですが、クラスオブジェクトはC++でいうところのポインタ渡しになるので、オブジェクトを変更することができてしまいます。にもかかわらず変更禁止にする仕組みが提供されていません。readonlyのようなそれっぽいキーワードはあるのですが、引数には使えません。ですので、C#では明確な区別はできません。かといって名前に何かを付けるといった慣習もありません。
5
+ C#は少々曖昧ですね。C#は構造体オブジェクトは値渡しですが、クラスオブジェクトはC++でいうところのポインタ渡しになるので、オブジェクトを変更することができてしまいます。にもかかわらず変更禁止にする仕組みが提供されていません。readonlyのようなそれっぽいキーワードはあるのですが、引数には使えません。ですので、C#では明確な区別はできません。かといって名前に何かを付けるといった慣習もありません。
6
+
7
+ ---
8
+ 追記
9
+ C#では引数で結果を受け渡しする際に、`ref`や`out`を付けて参照渡しにすることができます。その場合は書き換わることが明確に判断できます。