4

重複の可能性:
これを使用する理由はありますか->
いつこれを使用する必要がありますか->使用する必要がありますか?いつポインタ
を明示的に使用する必要がありますか?this

クラスへのポインタを操作するときthis->は、クラスの変数の前にを追加して、一時変数などではなく、現在のクラスにあることを明確にします。何かのようなもの

if(this->thing > other->thing)
    this->doFoo();

それ以外の

if(thing > other->thing)
    doFoo();

余分なものを追加しても大丈夫thisですか、それともコードの可読性を低下させますか?

4

7 に答える 7

4

それはあなたのコーディングスタイルに依存しますが、多くの人が使うでしょう

_myVariable
m_myVariable
myVariable_

メンバー変数を他の変数と区別するため。

しかし、最も重要なことは、一貫性を保つことです

于 2011-01-20T07:00:41.707 に答える
4

一貫性一貫性一貫性。

this->プレフィックスをプロジェクト全体でメンバーがアクセスするすべての場所で使用する場合は、プレフィックスを有効なコーディングスタイルと見なします。

メンバーには意味のあるプレフィックスを使用することを好みm_ます。私はそれが明示的なこれよりもカッターとタグスープが少ないと感じています->:

(alpha-this->gamma > this->alpha-gamma)

対。

(alpha-m_gamma > m_alpha-gamma)

(dotNettiesはm_古いとラベル付けされています-それにもかかわらず、私は小さなC#プロジェクトでそれを使用します。しかし、とにかく、他の異なるプレフィックスも使用します。)

インテリセンスの準備を支援したり、メンバーを具体的にフィルタリングしたりするためによく使用されるのを見てきました。これは問題ありませんが、特に一貫して使用されていない場合は、その理由でそのままにしておくのは疑わしいです。

于 2011-01-20T07:06:33.067 に答える
2

すでに述べたように、これはほとんどの場合、スタイルの問題です。

個人的にはデータメンバーには使用しませんが(mプレフィックスの代替を使用します)、関数には使用します。

  • テンプレート化されたコードとの一貫性のため、thisルックアップを延期する必要がある場合
  • 明確にするために、それがクラスのメソッド(おそらく基本クラス)であるか、独立した関数であるかを一目で区別するために

コードを読むときに基本クラスのレベルを踏みにじるのは絶対に嫌なので、this->明確化することで読者にとってはるかに簡単になると思います。そして、入力するのはあと6文字だけです。

于 2011-01-20T07:31:15.613 に答える
2

これはスタイルの質問なので、回答は主観的なものになります。同様に、私が一緒に仕事をした多くの人々は、メンバー変数がメンバーでm_あることを明確にするために、メンバー変数の前に接頭辞を付けるのが好きです。(m_fooあなたのようになりますthis->foo。)それなら、これは宇宙に対する犯罪だと感じる人がいると思います。YMMV。あなたとあなたが一緒に働いているかもしれない人のために働くものを使ってください。

1つの利点(または、誰に尋ねるかによっては欠点)this->は、メンバーと、パラメーターやローカル変数のようにローカルスコープの何かの両方になり得る同じ名前の変数を持つことができることです。

foo bar;

void f(foo bar)
{
   this->bar = bar;
}
于 2011-01-20T06:57:03.477 に答える
1

もちろん、あなたはそれを行うことができます、その上、コンパイラはあなたのためにそれを追加します。

于 2011-01-20T09:15:35.843 に答える
1

私もこのパターンが好きですが、「これ」であるマネージコードではもっと好きです。-矢印演算子は少しうるさい感じがしますが、それでもインスタンスレベルのものを参照しているときは非常に明確になります。

于 2011-01-20T06:55:56.147 に答える
-1

通常this、メソッド引数とメンバー変数の名前が同じ場合は、表記法を使用します。(メソッド引数をメンバー変数と区別するため)

たとえば、

void CMYClass::fun1(int sameName)
{
...
this->sameName = sameName;
}

そうでなければ、それは好みの問題です...

于 2011-01-20T07:03:53.783 に答える