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++
非常重要
我需要通过删除或替换托管代码将 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++