問題タブ [this-pointer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Visual C++ コンパイラは、呼び出された関数に this ptr をどのように渡しますか?
Eckel の「Thinking in C++」を使って C++ を学んでいます。次のように述べています。
- クラスに仮想メソッドが含まれている場合、そのクラスなどに対して仮想関数テーブルが作成されます。関数テーブルの仕組みを大まかに説明します。(vtable が必須ではないことはわかっていますが、Visual C++ によって作成されます。)
- 呼び出しオブジェクトは、呼び出された関数に引数として渡されます。(これは、Visual C++ (または任意のコンパイラ) には当てはまらない場合があります)。VC++ が呼び出し元オブジェクトを関数に渡す方法を調べようとしています。
Visual C++ で両方のポイントをテストするために、次のクラスを作成しました (Visual Studio 2010、WinXP Home 32 ビットを使用)。
ByteExaminer.h:
ByteExaminer.cpp:
動作中の vtable のナビゲーションbruteFG()
- を呼び出すとfg[0](this)
、f()
が呼び出されます。ただし、機能しないthis
のは、関数への の受け渡しです。つまり、this->b[0]
正しく出力されません (代わりにゴミが出てきます。これで segfault が発生しないのは幸運です)。
したがって、実際の出力は
は:
では、正しい結果を得るにはどうすればよいでしょうか。ポインタはVC++の関数にどのようにthis
渡されますか?
(注記: 私はこのような方法で真剣にプログラミングするつもりはありません。これは「気まぐれ」または学習経験のためです。ですから、私を適切な C++ 言語に改宗させようとしないでください :))
c++ - メンバー関数の修飾子を制限する (このポインターを制限する)
注:明確にするために、質問はrestrict
一般的なキーワードの使用に関するものではなく、具体的にはここで説明されているメンバー関数への適用に関するものです。
gcc を使用すると、__restrict__
(C99 の に相当する GNU++ のrestrict
) 修飾子をメンバー関数でthis
使用でき、関数のスコープ内で限定修飾ポインターを効果的に作成できます。牛肉はどこ?
ほとんどのメンバー関数は他のメンバーで動作しthis
、 を介してアクセスしますT* const
(通常はエイリアスされていません)。エイリアスされる可能性があるためthis
、メンバー関数内で何らかの形で使用されている型への 2 番目のポインターが必要であり、それはどこかから取得する必要があります。
これは、たとえば、すべての二項演算子や、少なくとも 2 つのポインターまたは同一の非自明な型の参照を取るその他の自由関数など、非メンバー関数の場合によくある状況です。ただし、これらの関数には がないthis
ため、関係ありません。
代入演算子、コピー コンストラクター、および単項比較演算子は 、原則としてエイリアス化this
できるメンバー関数の例です (別のオブジェクトが参照を介して渡されるため)。したがって、これらに restrict 修飾子を割り当てることは本当に意味があります。コンパイラーにとっては、他のすべての関数が restrict プロパティを持っていることはすでに明らかなはずです (T への 2 番目のポインターが存在しないため)。
たとえば、restrict
onを使用したoperator=
場合、結果として自己割り当てをまったくチェックしないでください。これthis
は、その関数のスコープ内でエイリアス化されていないと言っているためです ( true の場合、自己割り当ては発生しない可能性があります)。
明らかに、これは事前に知ることができないものであり、意味をなさないものでもあります.
では、実際にメンバー関数に制限修飾子を与えたい場合と、それが理にかなっているのはどのような場合でしょうか?
java - 小さなチャットクライアントの静的参照メンバーを介してクラスインスタンスを送信する
私はJavaで小さなチャットルームアプリを構築しています。ここで私がやろうとしているのは、静的ClientGUI参照メンバーを介して現在のクラスClientGUIインスタンス(this)を送信することです。ServerApplicationクラスは、通常の静的ゲッター(ServerApplication.mainで実行)を介してこの現在のclientGUI参照を受け取ることになっています。
面倒なデバッグを行った後でも、ClientGUI refを受信した後(getCurrentClientGuiReference()が失敗した場合)にサーバー側の参照がnullのままになる理由を理解できません。
(もちろん、送信された参照はサーバー側に転送される前に初期化されます)。
ローカルの静的参照メンバーを介して現在の参照を転送することはできませんか?おそらく私は何かを逃したのですか?
以下は関連するコードです。
前もって感謝します。
クライアント側:
}
サーバ側:
c++ - C ++このポインターの質問
これが問題です (おそらく最善の方法ではありません)、呼び出しているクラスへのポインターをパラメーターとして受け取るクラス コンストラクターを呼び出す機能が必要です (うーん!!!)。私が C# で行っているように、コードの方がよく見えます。
では、C ++で同じ結果を得るにはどうすればよいですか? 事前にサンクス。
c++ - 「this」がC++で非推奨の非constとして使用されたのはなぜですか
なぜthis
C++で非推奨になったのですか?C ++のポインタはJavaのポインタとどうthis
違うのですか?this
C ++の初期のバージョンでは、このポインターを変更できます。そうすることで、プログラマーはメソッドが作業しているオブジェクトを変更できます。この機能は最終的に非推奨になり、C++ではconstになりました。
java - オブジェクト参照自体に到達する方法
上記を呼び出すと、下のブロックでオブジェクト自体に到達したいと考えています。getCount() メソッドで newDt オブジェクトの countnumber に到達したいということです。このキーワードを使用してこれを試しましたが、実行されませんでした。どうすればいいですか?
c++ - 「this」ポインター (C++)
次のようなクラス定義があります。
私が変更したのは、FullO3CPU に別の引数を追加することでした
しかし、私は何をすべきかわかりません
このエラーが発生するため:
javascript - Jquery - $(this) で正しい要素をターゲットにできない
重複の可能性:
$(this) は関数では機能しません
コード内の正しい要素をターゲットにするのに問題があります。私のページにはサムネイルのリストがあり、「これは嫌い」アイコンをクリックすると、対象の動画が別の動画に変わります。
ここにHTMLがあります
アヤックスは:
私は何を間違っていますか?$(this).css("border","1px solid red") でさえ「機能」していません。(背景色と色も試しました)何も表示されません。
$(This) は、関数が正しく呼び出される「a」タグを指しますか? それで、ビデオボックスという名前の彼の親を探しています... 助けて?
ターゲットにできますか
c++ - 接続機能
this
次の QT 関数呼び出しには何が含まれていますか?
this
C++の背景は知っていますがthis
、この関数呼び出しで何を指しているのでしょうか?
c++ - これの std::shared_ptr
現在、スマートポインターの使用方法を学ぼうとしています。ただし、いくつかの実験を行っているときに、満足のいく解決策を見つけることができなかった次の状況を発見しました。
クラス A のオブジェクトがクラス B (子) のオブジェクトの親であるとしますが、両者はお互いを認識している必要があります。
std::shared_ptr
問題は、クラス A のオブジェクトがそれ自体 ( this
) をその子にどのように渡すことができるかということです。
Boost 共有ポインター ( for の取得boost::shared_ptr
this
std::
) の解決策はありますが、スマート ポインターを使用してこれを処理するにはどうすればよいでしょうか?