[解決済み] C++でアンパサンド(&)記号はどのように機能するのでしょうか?重複
2022-03-02 06:58:30
質問
重複の可能性があります。
C++のポインタ変数と参照変数の違いは何ですか?
これは紛らわしいですね。
class CDummy
{
public:
int isitme (CDummy& param);
};
int CDummy::isitme (CDummy& param)
{
if (¶m == this)
{
return true; //ampersand sign on left side??
}
else
{
return false;
}
}
int main ()
{
CDummy a;
CDummy* b = &a;
if ( b->isitme(a) )
{
cout << "yes, &a is b";
}
return 0;
}
C言語では、&は通常varのアドレスを意味しますが、ここではどのような意味でしょうか?これはポインタ記法の洒落た方法なのでしょうか?
ポインター表記と仮定しているのは、これが結局のところポインターであり、2つのポインターの等価性をチェックしているからです。
私はcplusplus.comで勉強しているのですが、このような例題があります。
どのように解決するのですか?
まず始めに、以下のことに注意してください。
this
は、そのクラスへの特別なポインタ(== メモリアドレス)です。 まず、オブジェクトがインスタンス化されます。
CDummy a;
次に、ポインタのインスタンスを作成します。
CDummy *b;
次に、メモリアドレスの
a
はポインタ
b
:
b = &a;
次に、メソッド
CDummy::isitme(CDummy ¶m)
が呼び出されます。
b->isitme(a);
このメソッドの内部でテストが評価されます。
if (¶m == this) // do something
ここで厄介なのは、paramはCDummy型のオブジェクトであるが
¶m
はparamのメモリアドレスです。そこで、paramのメモリアドレスは、"という別のメモリアドレスと照合される。
this
"です。このメソッドの引数に、このメソッドの呼び出し元のオブジェクトのメモリアドレスをコピーすると、これは
true
.
このような評価は、通常、コピーコンストラクタをオーバーロードするときに行われます。
MyClass& MyClass::operator=(const MyClass &other) {
// if a programmer tries to copy the same object into itself, protect
// from this behavior via this route
if (&other == this) return *this;
else {
// otherwise truly copy other into this
}
}
また
*this
ここで
this
は
参照される
. つまり、メモリアドレスを返すのではなく、そのメモリアドレスに位置するオブジェクトを返すのです。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Enterキーを押して続行する
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された