C++/CLI对应的C++原生类型是什么System::String^

What's the corresponding C++ native type of C++/CLI System::String^

我需要通过删除或替换托管代码将 C++/CLI 项目重写为本机 C++ 项目。我对C++/CLI不是很熟悉,那么,C++/CLI对应的C++原生类型是什么System::String^,是std::string还是std::string*

比如一个C++/CLI函数Foo(System::String^ location),改写成Foo(std::string location),这样对吗?

可能是 std::string,但这取决于您的所有权意图。例如, String^ 最接近的翻译(暂时忽略共享内存部分)将是 std::string& ,它被称为 reference - 实际上是一个指针,除了它们永远不会为 null 并且不能手动取消分配。 class 比 std::string& 成员(意味着它不拥有该数据)更有可能拥有 std::string 成员(意味着它拥有该数据)

函数签名的另一个问题是是否允许 Foo 改变 location 对象。如果不是,则应使用 const std::string& 参数

可能不是 std::string*,因为 'raw pointers' 在现代 C++ 中很少使用。你通常在堆栈上创建对象并使用引用传递它们,允许 RAII 管理内存——我肯定会阅读更多关于 RAII 的内容,它解释了所有权模型并且对于编写 C++

非常重要