7

C++ で 'this' を使用するのが良い方法かどうか疑問に思っていました。最初は、参照しているものが現在のクラスのメンバーであることを明らかにする必要があると思っていましたが、次のようなコードで終了することもあります。

Document::Document(QWidget *parent) : QWidget(parent)
{
    this->file = 0;
    this->layout = new QGridLayout(this);
    this->layout->setSpacing(2);
    this->layout->setMargin(0);
    this->setLayout(this.layout);
    this->textArea = new QTextEdit(this);
    this->textArea->setLineWrapMode(QTextEdit::NoWrap);
    this->textArea->setAcceptDrops(true);
    this->textArea->setAcceptRichText(true);
    this->textArea->setUndoRedoEnabled(true);
    this->textArea->setFont(QFont("Mono" , 11));
    this->layout->addWidget(this->textArea);
    this->textArea->show();
    this->textArea->setFocus();
}

のように使用すると、特に「これ」がなくても見栄えがよくなると思いthis->layout->addWidget(this.textArea);ます。そして、コードはほとんどの場合、読みやすくするために同じスタイルを使用する必要があると思います.同じクラスのメンバー。

4

6 に答える 6

10

これに対する唯一の答えはありません。それは文脈にもよるし、誰に尋ねるかにもよる。

thisずっと使っている人もいます。決して使わない人もいます。代わりに、すべてのメンバー変数の名前を特別なプレフィックス (mFileの代わりにfile) に変更するものもあります。

thisあいまいさを避けるために必要な場合にのみ接頭辞を使用することを好みます。

適切に記述されたコードでは、ローカル変数とメンバー変数のどちらを参照しているかは通常明らかであり、this実際にはあまり機能しません。しかし、変数がクラス メンバーであるかどうかを読者が判断するのが難しい場合があります。次にthis、明確にする良い方法です。

于 2012-04-25T06:21:03.970 に答える
5

使用thisすることで読みやすくなる(つまり、理解しやすくなる)場合は、余分な入力を行うだけの価値があります。

複雑なプログラムでは、コードのすべての行が1回書き込まれますが、何度も(そしてさまざまなプログラマーによって)読み取られるため、これは良い投資です。

私が知っている最も読みやすい言語の1つであるPythonは、毎回(C ++self.xに相当する)書くことを強制しますが、それはまったく問題ではありません。this->xそれに関する問題は、Pythonでエラーslef.xの代わりに書くと実行時self.xにキャッチされることですが、これは別の無関係な問題です...

于 2012-04-25T06:44:36.747 に答える
3

(あなたの例では)コンパイラに違いはありません。
これはユーザーの好みの問題であり、より直感的であると感じる人もいれば、余分な入力が不要であると考える人もいます。
したがって、使用するコーディングガイドラインで使用する必要がある場合は、それを使用してください。

this他に方法がないため、特定のケースを使用する必要があることに注意してください。ただし、それはあなたの質問ではありません。

于 2012-04-25T06:13:12.000 に答える
2

個人的には使いたくないthis
しかし、これは個人的な好みの問題だと思います。あなたの一貫性がある限り、それは重要ではありません。

注: また、必ず -WShadow -WError でコンパイルします。

于 2012-04-25T06:18:03.673 に答える
2

私の意見では、メンバーに対して「これ」を使用することは一般的ではありません。私見はかなり乱雑に見えます。私はすべてのメンバーに "m_" プレフィックスを使用することを好みます。そのため、何がメンバーで何がローカル変数であるかが明確になります。いずれにせよ、もっと重要なグッド プラクティスがあります。

于 2012-04-25T06:25:27.230 に答える
0

私は通常this、すべてのメンバーを使用するコードを好みます。

あなたの例では、ローカル変数を参照していないため、冗長に見えます。ただし、ローカル変数とインスタンス (またはクラス) 変数を組み合わせて使用​​するコードでは、どこを参照すればよいかを正確に把握しておくと便利です。

于 2012-04-25T06:16:45.903 に答える