C++/CLI value structとはどういう意味ですか?

huahi11115 340 評価のポイント
2024-04-22T07:14:08.23+00:00

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)の構造体は、スタック領域に作成されますか。

御回答をよろしくお願い致します。

.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
66 件の質問
C++
C++
C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
20 件の質問
0 件のコメント コメントはありません
{count} 件の投票

承認済みの回答
  1. とっちゃん 625 評価のポイント MVP
    2024-04-22T08:24:50.1733333+00:00

    C++/CLI の ref class, ref struct は、参照型(VBの Class と同じ)になります。 それに対し、value class, value struct は、値型(VBでいうところの Struct と同様)になります。ただし、value class(struct)と、Struct では、value class のほうが制限が強いのでそのあたりはちょっと違っています。

    class と struct の違いは、C++ のそれと同じです。この部分は、VB(C#)とは異なります。

    今の Learn にはなぜか C++/CLI のリファレンスがない(Learnに入ってない…orz)ので、この部分は C++/CXの記述が参考になるかな?

    Ref クラスと構造体 (C++/CX)

    値クラスと構造体 (C++/CX)

    1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。