15

この前の質問this[0]では、C# での意味を尋ねています。C++ では、this[0]「 が指す配列の 0 番目の要素」を意味しthisます。

この方法で受信者オブジェクトを参照するために、C++ で未定義の動作が発生しないことが保証されていますか? 私はこの構文を使用することを推奨しているわけではなく、仕様がこれが常に機能することを保証しているかどうかに最も興味があります。

ありがとう!

4

6 に答える 6

19

有効なオブジェクト ポインタpの場合、p[0]は と同等*pです。Sothis[0]は と同等*thisです。それ以上のことはありません。を使用して有効なポインターを逆参照できるのと同じように、それを使用して[0]逆参照できますthis

言い換えれば、それは単なる「トリッキーな」書き方*thisです。コードを難読化するために使用できます。スタンドアロン オブジェクトはサイズ 1 の配列と見なすことができるため、特定の状況で有用な目的で使用される可能性があります。非配列オブジェクトへのポインタは、オブジェクトの型をその要素型として持つ長さ 1 の配列の最初の要素へのポインタと同じように動作します。")

thisPS Johannes がコメントで指摘したように、C++11 の機能を使用することで、不完全な型へのポインターであるコンテキストを考え出すことができます。その場合this[0]、式は無効になりますが、*this式は有効なままです。

于 2013-05-20T17:54:55.503 に答える
11

this[0]は と同じ*(this + 0)なので、これで問題ありません (少し奇妙ですが)。

于 2013-05-20T17:54:47.657 に答える
3

ええ、それは同じことです*this

于 2013-05-20T17:55:10.870 に答える
0

これは (定義上) と同等*(this + 0)であり、 と同じ*thisです。安全で明確に定義されていますが、奇妙です。

于 2013-05-20T17:55:06.230 に答える