[解決済み] ポインタ `this` はいつ明示的に使用する必要がありますか?
2022-10-08 16:21:01
質問
どのような場合に、明示的に
this->member
を明示的に記述する必要があります。
と書くべきでしょうか?
どのように解決するのですか?
通常、その必要はありません。
this->
が暗示されます。
名前があいまいな場合、クラスのメンバやローカル変数の曖昧さをなくすために使われることがあります。しかし、ここでは全く異なるケースで
this->
が明示的に必要な場合です。
次のようなコードを考えてみましょう。
template<class T>
struct A {
int i;
};
template<class T>
struct B : A<T> {
int foo() {
return this->i;
}
};
int main() {
B<int> b;
b.foo();
}
を省略した場合
this->
を省略した場合、コンパイラは
i
の全てのインスタンスに存在するかしないか分からないので、 コンパイラはこれをどのように扱うか分かりません。
A
. ということを伝えるために
i
のメンバーであることを伝えるために
A<T>
のメンバーであり、任意の
T
は、その
this->
の接頭辞が必要です。
注意: この場合でも
this->
を使うことでプレフィックスを省略することができます。
template<class T>
struct B : A<T> {
using A<T>::i; // explicitly refer to a variable in the base class
int foo() {
return i; // i is now known to exist
}
};
関連
-
[解決済み] テスト
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] 関数/メソッドのキーワード 'inline' はいつ書けばよいのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】'std::cout'への未定義の参照