C++/CLI value structとはどういう意味ですか?
Microsoft公開のドキュメントでも記載が無いので質問します。
「ref class と ref struct (C++/CLI および C++/CX)」等 は読みました。
https://learn.microsoft.com/ja-jp/cpp/extensions/classes-and-structs-cpp-component-extensions?view=msvc-170
C++/CLIで、スタック領域に作成される構造体を定義したいと思っています。
掲記:「ref class と ref struct (C++/CLI および C++/CX)」の中に
ref class
ref struct
value class
value struct
この4種のクラス/構造体の定義法が出てきており、ref class/ref structは解説されていますが、value class/value structについては解説がありません。
(1) #pragma managed
public struct struct1 {
public:
const int int0 = 2;
int p1(void) { return 0; }//条件を変えて実験したら、この行でコンパイルエラーが発生した
};
(2) #pragma managed
public ref struct struct2 {
public:
const int int0 = 2;
int p1(void) { return 0; }
};
(3) #pragma managed
public value struct struct3 {
public:
const int int0 = 2; //コンパイルエラー (1)と(3)が違うことを実証するために入れた
int p1(void) { return 0; }
};
(1)、(2)共にコンパイルは通ります。私は(1)でrefを省略するとvalue structになるのだと考え、(3)の様に記述してみたところ、「E2804 値クラスでは既定のメンバー初期化子は許可されていません」というエラーになります。
つまり、(1)と(3)は違う意味だということです。
質問したいことですが、
※1 value class/value struct とは何ですか。ref class/ref structと何が違うのですか。
※2 (1)の構造体は、スタック領域に作成されますか。
御回答をよろしくお願い致します。