コピーまたは参照セマンティクスの向上::精神の原則<>?
-
28-09-2019 - |
質問
うことにより書きシェルの言語パーサに進みました。精神。しかし、私は不明の一部についての基本問題に関しての意味 rule
s.
の文書がメンバー r.alias()
や r.copy()
の rule
.IIUC、これらは、会員への参照を返しますルールのコピーのルールの内容です。しかし、ところ明示されていない。どのようなときだけ利用ルール定義の他の規則です。私の実験から相互に規則で再帰的に定義できる:
rule<Iter> r1, r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;
のルールによる参照の内部パーサの表現です。問題は、どのような中にいるときに変数の範囲で、例えば:
rule<Iter> r1;
{
rule<Iter> r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;
}
... // use r1
同注意は、提供を原則から構文解析表現を含むrvalueのルール作業r.copy()
うrvalueのタイプ rule
もん)?例えば.
rule<Iter> f() { return char_('a') << char_('b'); }
rule<Iter> r1 = ... << f();
誰でも啓発の詳細なセマンティクス rule
'sコピーおよび参照して、正誤解です。
解決
その答えによって異なり版の精神をまつ。
精神。クラシックの精神V1.xする特別なコピーをセマンティクス。の書類は
がルールを参照しますので、どこでも 右側のEBNF 表現のルールが開催される 表現による参考値です。その 責任のクライアントの確保 が参照されるルールに滞在 範囲ではなく破壊 が再び現れるのを確認後、"されます。
のオペレータ基本的に参照しrhsルールを作成することなくディープコピーします。このような工夫をすればもっと:
rule<> r1, r2;
r1 = ...;
r2 = r1;
これ性の高い混乱を防ぎま取り扱いルールと同じように"普通"にオブジェクト。
その理由があったの会員機能 rule::copy()
, きを明確に深くコピー原則(インスタンスを格納しているSTLコンテナなし).
同時にこの
r2 = r1.copy();
平間違っています。 r2
"を介して(破壊)臨時のコピー r1
から返される機能 copy()
.
"まで。Qi(精神.PhpがV2で増えたファイルです。x)の行動は一部を変更します。ルールは正していた場合、取り扱いを外parsers.保存できますが、通常は器総合機構のホームページに掲載のオペレーター公開されました。もので注意する内部パーサの表現ルールが開催される参照も可能を参照していルールと同じように前:
rule<> r1, r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;
Ru,キーワードが必要ディープコピーの原則があるのでまだの参functon copy
.
変更後のコピーを意味して他の副作用によるものです。を構築します。
r1 = r2;
現在の作成(深)のコピー r2
, ができないますが、ご了承くださいま r2
すぐそrhsにのみ割り当てられた後に割り当てられ r1
.そのための新規加機能 alias
を参照セマンティクスこのコーナーの場合:
r1 = r2.alias();
いずれの場合では両方のバージョンの精神までとぶ参考文献の一部についてのルールから参照されるパーサは表現出対象外です。
ちなみに、精神版を実装する機能 rule::ref()
.