System::Convert::ToString()和std::to_string()之间的区别? 我是Visual C++编程中的一个完整的NOOB,所以我不知道这是否有意义。

System::Convert::ToString()和std::to_string()之间的区别? 我是Visual C++编程中的一个完整的NOOB,所以我不知道这是否有意义。,c++,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:

我正在尝试将标签文本更改为显示在表单中,因此如果我这样做:

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::Convert::ToString();


??

系统::字符串^j是一个C++/CLI字符串,它是微软在.NET框架之上实现C++的,因此你可以用.NET语言(C语言,VB.NET)进行通信,并且仍然使用C++。
^
是C++/CLI使用的垃圾收集指针。这意味着您在使用
gcnew

<> >代码:ST::String 是C++标准库的字符串版本。它是本地C++,正如一些人所说的。p> <>在C++中,每次使用“代码>新< /COD>指针时,YAK,你必须忘记调用<代码>删除< /代码>。
System::Convert::ToString
也是Microsoft的C++/CLI

std::to_string
将是C++11的等价物


实现是完全不同的,因此您不能期望使用这些不同的类型获得相同的结果

造成混淆的原因可能是您使用的是C++/CLI,因此您可以访问许多不同的字符串类型。开发C++/CLI是为了让您能够访问两个世界:

  • 非托管:这基本上是本地的,标准C++代码。虽然C++和CLI完全不符合C++标准,但它允许你混合C++代码:你可以使用大多数C++库(通过它只是工作范式)。此代码称为“非托管”,因为您必须自己管理内存
  • 托管:这是.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();
    
    string是非托管的stl字符串。这是标准C++类,对C++和C++都适用。如果要将该类与其他.NET类一起使用,则必须封送该类。如果您试图完全停留在非托管代码中,请使用此类


    如果你想学习C++,我建议现在关闭C++/CLI,并坚持标准的库字符串。< /P>两种情况下,一个是C++ + CLI,一个是标准C++。差异是意料之中的。看看文档就能回答这个问题——类型不匹配!我明白了,但是VisualStudio表单标签的文本属性似乎只接受托管字符串。。。有办法从一个到另一个吗?我有一个方便的查找表书签:[

    j = valor1+","+valor2;
    
    System::String^ j= Int32(1).ToString();