【问题标题】:Difference between static cast and new静态演员和新演员之间的区别
【发布时间】:2012-10-30 22:14:31
【问题描述】:

我知道动态分配内存的两种方法。我了解“新”的工作原理,但我不了解“静态演员”的工作原理:

double* A1;
double** A2;

//1D array
A_1 = new double[size];

A_1 = static_cast <double*> (new double[c]);

//2D array
A_2 = reinterpret_cast <double**> (new double[r]);
for(i = 0; i < r; i++)
    A_2[i] = static_cast <double*> (new double[c]);

我不明白 static 和 reinterpret 是如何工作的。

【问题讨论】:

  • "Casting" - 静态或其他 - 不分配内存,它只是改变类型。

标签: c++ memory pointers memory-management dynamic


【解决方案1】:

虽然 new 是分配新对象的关键字,但 static_cast 和 reinterpret_cast 有不同的用途,正如其他人现在指出的那样,不要分配内存。

一个简短的解释是 static_cast 在指向兼容类的指针或兼容的非指针类型之间转换。因此,您可以将 Vehicle 指针转换为 Car 指针或以其他方式转换,但是在运行时不会检查您的 Vehicle 在您转换时实际上是 Car。另一方面,dynamic_cast 具有运行时检查。

即使类型不兼容,reinterpret_cast 也会简单地转换指针。

有很多资源可以找到更深入的解释,比如http://www.cplusplus.com/doc/tutorial/typecasting/

【讨论】:

  • 所以我可以使用 static 和 reintrepret 为 A_1 声明一维或二维整数数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2016-10-20
  • 1970-01-01
  • 2013-02-23
  • 2019-04-23
相关资源
最近更新 更多