我是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();
????
答案 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是为了让您可以访问这两个领域:
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,并坚持使用标准库字符串。