1

いくつかの情報源を研究することで、私はよくこれを見に来ました:(実際の情報源の一部)

void CUserMng::AddText( LPCTSTR szMessage )
{
    map<u_long,CUser*>::iterator it;
    for( it = m_users.begin(); it != m_users.end(); ++it )
    {
        CUser *pUser = it->second;
        if( !IsValidObj( pUser ) )
            continue;

            (pUser)->AddTextNotice( szMessage );
    }
}

かっこはどういうpUser意味ですか?

私は思いついた:

struct bar
{
    int value;
}

void foo()
{
    bar *ptr = NULL; //new bar;
    (ptr)->value = 1;
    //delete bar
}

私の推測では、括弧 " (ptr)"を使用した呼び出しは、ポインターが無効な場合に呼び出しが行われないようにするためのものでしたが、そうではないようです。私がよく見る別の例は次のとおりです。

classB* ptr = new classB;
((classA*)ptr)->callfunctionfromclassA;
4

4 に答える 4

4

最初の例では、括弧は何もしていません。

第二に、それらが省略されると式の意味が変わるので、それらが必要になります。->演算子によるメンバーの選択は、型キャストよりも優先されます。だから、もしあなたが書くとしたら

(classA*)ptr->callfunctionfromclassA();

ptr->callfunctionfromclassA()これは、呼び出しの戻り値をにキャストすることを意味しますclassA *。例で書かれているように、最初に型にキャストptrしてからclassA *呼び出しcallfunctionfromclassAます。

于 2012-08-25T00:33:24.030 に答える
2

最初の例の括弧は何もしません。

2番目の例では、間接参照される前に、親がポインターをキャストしています。

于 2012-08-25T00:24:35.050 に答える
2

かっこはどういうpUser意味ですか?

それは、そのコードを書いた人が自分が何をしているのかわからなかったことを意味します。

私がよく見る別の例は次のとおりです。

classB* ptr = new classB;
((classA*)ptr)->callfunctionfromclassA;

これは、15年間死んでいたはずの言語であるClassesでCを書いている人を意味します。

于 2012-08-25T00:40:57.257 に答える
0

最初のケースでは、括弧は冗長です。それらは、リファクタリングまたはスタイル設定の結果である可能性があります。

classA*2番目のケースでは、逆参照する前にptrをaにキャストすることを意味します。括弧がないと、何が起こるかを伝えるために演算子の優先順位を知る必要があるため、コードははるかに明確で安全です。

于 2012-08-25T00:25:18.730 に答える