System :: Convert :: ToString()和std :: to_string()之间的区别?

时间:2013-03-20 20:20:14

标签: c++

我是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();

????

2 个答案:

答案 0 :(得分:3)

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

之后不必关心自己清理

std::string是C ++标准库的字符串版本。它是原生C ++ ,有些人可能称之为。

在C ++中,每次使用带有指针的new时,都不要忘记调用delete

System::Convert::ToString也是Microsoft的C ++ / CLI。

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

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

答案 1 :(得分:0)

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

  1. Unmanaged:这基本上是原生的标准C ++代码。虽然C ++ / CLI绝不符合C ++标准,但它允许您将C ++代码混合在一起:您可以使用大多数C ++库(通过“它只是工作范例”)。此代码称为“非托管”,因为您必须自己进行内存管理。
  2. 管理:这是.NET方面的事情。使用.net类,您可以访问microsoft推出的有用库,也可以使用垃圾收集器。
  3. System :: String是托管的.NET字符串类型。这是所有.NET语言使用的字符串类型(C#,VBA,ect)。这是一个只能用于C ++ / CLI& 。净。如果您要编写纯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,并坚持使用标准库字符串。