您始终可以使用字符串文字调用函数,因为编译器会自动将其转换为适当字符串类型的值。
这里的问题是您试图将 .NET Framework 的东西 ( System::String
) 与标准 C++ 字符串类型 ( std::string
) 混合在一起,而它们根本不能很好地混合。System::String
接受类型参数的 .NET 函数未编写或重载以接受类型参数std::string
。如果您使用的是 .NET Framework,那么您使用的是 C++/CLI,并且通常希望您使用 .NET 字符串类型,而不是 C++ 字符串类型。
类似地,标准 C++ 函数是预期std::string
的,但对 .NET Framework 字符串类型一无所知。因此,如果您希望调用 C++ 标准库中的函数,您应该使用它的字符串类型。
C 风格的字符串 ( char[]
) 是旧的回退,在编写 C++ 代码时不是你真正想要使用的东西。std::string
始终是一个更好的选择,它甚至提供了c_str()
您在调用需要 char 数组的 API 函数时已经知道要使用的方法。但与其他两种字符串类型一样,这一种也不能相互转换。
std::string
您将遇到的一个特别大的问题是char[]
类型只接受“窄”(非 Unicode)字符串,而 .NET FrameworkSystem::String
类型只适用于宽(Unicode)字符串。当涉及到转换时,这会进一步影响组合。不可能像演员表那样简单。
但这并不意味着不可能在类型之间进行转换。MSDN 上有一个有用的文档,解释了如何在各种 C++ 字符串类型之间进行转换。
总之,您可以System::String
使用接受 a 的适当重载构造函数从 C 样式字符串转换为char*
:
const char* cString = "Hello, World!";
System::String ^netString = gcnew System::String(cString);
Console::WriteLine(netString);
delete netString;
然后,当然,您可以通过将上述方法与方法相结合来转换 from to std::string
to :System::String
c_str()
std::string stdString("Hello, World!");
System::String ^netString = gcnew System::String(stdString.c_str());
Console::WriteLine(netString);
delete netString;