3

ドラフトC++ 11標準は言う

オブジェクトがビットフィールドまたはサイズがゼロの基本クラスのサブオブジェクトでない限り、そのオブジェクトのアドレスはそれが占有する最初のバイトのアドレスです。ビット フィールドではない 2 つのオブジェクトは、一方が他方のサブオブジェクトである場合、または少なくとも 1 つがサイズ 0 の基本クラス サブオブジェクトであり、それらが異なる型である場合、同じアドレスを持つことができます。それ以外の場合、それらは別個のアドレスを持つものとします。(1.8(6))

ただし、以前は、オブジェクトは式によって作成できると述べており、式によって、この目的のために予約されているブロックのアドレスを返す可能性のあるユーザー定義が呼び出される可能性がnewあると考えられます (最初の割り当ては最初の割り当てを返す可能性があります)。これは、異なるアドレスを持たない 2 つのオブジェクト ( によって作成されたものとブロック) があることを意味します。1.8(6) は、ユーザー定義がこのように機能することは違法であることを意味しますか? それとも、言語定義の単なる穴ですか? newoperator new()char[]newchar[]new

4

1 に答える 1