3

私は Visual C++ プログラミングの完全な初心者なので、これが意味があるかどうかはわかりません。

さて、フォームに表示するラベル テキストを変更しようとしているので、これを行うと:

int value_a = 1;
int value_b = 2;
System::String^ j;
j = System::Convert::ToString(value_a) + ", " + System::Convert::ToString(value_b);
label1 -> Text = j;

それは完全に機能しますが、私がこれをやろうとしたとき:

int value_a = 1;
int value_b = 2;
System::String^ j;
j = std::to_string(valor1) + ", " + std::to_string(valor2);
label1-> Text = j;

たくさんのエラーが発生します...使用の違いは何ですか

string j;

また

System::String^ j;

および関数間

System::Convert::ToString();

std::to_string();

????

4

2 に答える 2

3

System::String^ j;は、.NET フレームワーク上に Microsoft が実装した C++ である C++/CLI 文字列であるため、.NET 言語 (C#、VB.NET) と通信しながら C++ を使用できます。これ^は、C++/CLI で使用されるガベージ コレクション ポインターです。これは、使用後に後片付けを気にする必要がないことを意味します。gcnew

std::string文字列の C++ 標準ライブラリ バージョンです。ネイティブC++と呼ぶ人もいます。

C++ ではnew、ポインターを使用するたびに、yuck を呼び出すことを忘れてはなりませんdelete

System::Convert::ToStringも Microsoft の C++/CLI です。

std::to_stringそれと同等のC++ 11になります。

実装はかなり異なるため、これらの異なる型で同じ結果を得ることは期待できません。

于 2013-03-20T20:40:16.047 に答える
0

混乱の原因はおそらく、C++/CLI を使用しているため、さまざまな文字列型にアクセスできることです。C++/CLI は、両方の世界にアクセスできるように開発されました。

  1. アンマネージ: これは基本的にネイティブの標準 C++ コードです。C++/CLI は C++ 標準にまったく準拠していませんが、C++ コードを混在させることができます。ほとんどの C++ ライブラリを使用できます (「動作パラダイム」を通じて)。このコードは、独自のメモリ管理を行う必要があるため、「アンマネージ」と呼ばれます。
  2. マネージド: これは .NET 側のものです。.net クラスを使用すると、Microsoft が提供する便利なライブラリにアクセスできるだけでなく、ガベージ コレクターを操作することもできます。

System::String は、管理された .NET 文字列型です。これは、すべての .NET 言語 (C#、VBA など) で使用される文字列の型です。これは、C++/CLI & .NET でのみ使用できるクラスです。純粋な Windows コードを作成する場合、または .NET ライブラリを作成する場合は、この型を使用します。これらの言語では、「to string」関数は実際にはすべてのクラスのメンバーであり、キャストは多くの場合暗黙的です。使用できます

j = valor1+","+valor2;

明示的に取得したい場合は、Int::ToString 関数を調べます。

System::String^ j= Int32(1).ToString();

std::string は、管理されていない stl 文字列です。これは標準の C++ クラスで、C++ と C++/CLI の両方で使用できます。他の .NET クラスで使用する場合は、このクラスをマーシャリングする必要があります。アンマネージ コードに完全にとどまろうとしている場合は、このクラスを使用します。

C++ を学習しようとしている場合は、今のところ C++/CLI をオフにして、標準ライブラリ文字列を使用することをお勧めします。

于 2013-03-20T20:41:04.767 に答える