この前の質問this[0]
では、C# での意味を尋ねています。C++ では、this[0]
「 が指す配列の 0 番目の要素」を意味しthis
ます。
この方法で受信者オブジェクトを参照するために、C++ で未定義の動作が発生しないことが保証されていますか? 私はこの構文を使用することを推奨しているわけではなく、仕様がこれが常に機能することを保証しているかどうかに最も興味があります。
ありがとう!
この前の質問this[0]
では、C# での意味を尋ねています。C++ では、this[0]
「 が指す配列の 0 番目の要素」を意味しthis
ます。
この方法で受信者オブジェクトを参照するために、C++ で未定義の動作が発生しないことが保証されていますか? 私はこの構文を使用することを推奨しているわけではなく、仕様がこれが常に機能することを保証しているかどうかに最も興味があります。
ありがとう!
有効なオブジェクト ポインタp
の場合、p[0]
は と同等*p
です。Sothis[0]
は と同等*this
です。それ以上のことはありません。を使用して有効なポインターを逆参照できるのと同じように、それを使用して[0]
逆参照できますthis
。
言い換えれば、それは単なる「トリッキーな」書き方*this
です。コードを難読化するために使用できます。スタンドアロン オブジェクトはサイズ 1 の配列と見なすことができるため、特定の状況で有用な目的で使用される可能性があります。非配列オブジェクトへのポインタは、オブジェクトの型をその要素型として持つ長さ 1 の配列の最初の要素へのポインタと同じように動作します。")
this
PS Johannes がコメントで指摘したように、C++11 の機能を使用することで、不完全な型へのポインターであるコンテキストを考え出すことができます。その場合this[0]
、式は無効になりますが、*this
式は有効なままです。
this[0]
は と同じ*(this + 0)
なので、これで問題ありません (少し奇妙ですが)。
ええ、それは同じことです*this
これは (定義上) と同等*(this + 0)
であり、 と同じ*this
です。安全で明確に定義されていますが、奇妙です。