gpt4 book ai didi

c# - 如果 C# 指针被认为是 "unsafe,",这是否意味着 C++ 指针也是 "unsafe"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:05 27 4
gpt4 key购买 nike

我正在用 C# 做一个项目,它可以从线性代数包中获益。我看过外面的那些,但我真的不想付钱,或者我发现它们不是很好。所以我决定自己写。

我读到 C++ 数组比 C# 数组快得多,但在 C# 中使用指针数组可以获得类似的性能,尽管它们被认为是“不安全的”。我很想知道 C++ 指针有何不同,以及“不安全性”是否也适用于 C++,或者它们是否是两个根本不同的东西。

最佳答案

C#(不安全)指针和 C++(原始)指针都具有以下特征:

  • 它们允许您引用给定地址空间中的地址。
  • 它们允许您对它们执行简单的算术运算(加法和减法),涉及整数作为偏移量。
  • 它们允许您将它们指向的任何内容取消引用为特定类型的数据。
  • 错误地使用它们会引发未定义的行为,因此确保您正确使用它们是您的全部责任。

从这个意义上说,无论任何细微差异(如语法、固定等),C# 指针和 C++ 指针几乎都是相同的编程概念。因此,它们几乎同样适用于静态分析,因此它们同样安全或不安全。因此,C# 将此构造显式调用为 unsafe 的事实并不会使等效的 C++ 构造“安全”。相反,使用“不安全”代码的能力在 C++ 中“始终开启”。

例如,考虑您尝试使用越界索引访问数组的情况:

  • 对于 C# 数组,在使用索引器语法时会出现异常,在使用指针和偏移量时会调用未定义的行为。
  • 对于 C++ 中的 C 风格数组,您将在使用索引器语法或指针和偏移量时调用未定义的行为(因为这两种语法对于 C 风格数组是等效的)。
  • 对于 C++11 std::array,您在使用 array::at 时会遇到异常,并且在使用索引器语法时会调用未定义的行为。

关于c# - 如果 C# 指针被认为是 "unsafe,",这是否意味着 C++ 指针也是 "unsafe"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com