D言語 Part15at TECH
D言語 Part15 - 暇つぶし2ch207:デフォルトの名無しさん
07/10/17 14:19:58
>>202
たとえば
 class Stream {
  int opApply( int delegate(ref const(char)[] line) dg );
 }
こういう宣言だったとしたら、
string s;
 foreach(line; din) if( line[0] == '#' ) s = line;
 writeln( "#で始まってた最後の行は", s );
このコードは期待した通りに動かないかもしれない。
Streamが内部でlineの中身を勝手に再利用してるかもしれないので。
constだと、"自分が"lineの中身を書き換えることはできなくなるけど、
他のところで書き換えが起こる可能性は否定できない。

これが
 class Stream {
  int opApply( int delegate(ref invariant(char)[] line) dg );
 }
こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。
invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で
書き換えるようなことがない。

とかそういう使い方。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch