私はこれ(*x).y
がC++のようx->y
であることを知っていますが、このコードは私のために配線されています。誰かが私を助けることができますか、それについて私に参照を与えることができますか?
3 に答える
全体として、変数名の用語を使用して、currentHtml()
関数の戻り値をmanifest
's currentItem
'fileContent
変数に格納します。
それを分解するには:
((ManifestItem*)manifest->currentItem())
クラスには、「現在のアイテム」を返すメソッドがありcurrentItem()
ます。manifest
は、この返されたアイテムをデータ型(ManifestItem*)
にキャストします。ManifestItem
残りは、私が望む、自明です:
->fileContent = currentHtml();
CPPではどういう
((ManifestItem*)manifest->currentItem())->fileContent = currentHtml();
意味ですか?
それは誰かが何か悪いことをしていることを意味します。
まず、タイトルに質問を入れて、何か悪いことをしているのです。第二に、そのキャストは何か疑わしいものの兆候です。だが ...
最初に知っておく必要があるのは、C++演算子の優先順位規則です。要素選択演算子->
はキャスト演算子よりも優先される(type)
ため、これを次のように書き直すことができます。
((ManifestItem*)(manifest->currentItem()))->fileContent = currentHtml();
パーツごとに分けて、
manifest
オブジェクトのメンバーcurrentItem()
関数が呼び出され、おそらく何らかのタイプのポインターが返されます。キャストを考えると、私はポインタをcurrentItem()
返すと思います。void*
- Cスタイルのキャスト演算子は、そのポインターをオブジェクトへのポインターに変換し
ManifestItem
ます。 - その
fileContent
オブジェクトのメンバーは、を呼び出した結果に設定されますcurrentHtml()
。
((ManifestItem*)manifest->currentItem())->fileContent = currentHtml();
1)currentHtml()を呼び出します
2)マニフェストをManifestItemへのポインターにキャストします
3)#2のポインターを逆参照し、そのcurrentItemメンバー関数を呼び出します
4)#3を逆参照し、そのfileContentデータメンバーに#1からの値を割り当てます-または、operator =()を使用します