【问题标题】:How to cast const unsigned int array into int array如何将 const unsigned int 数组转换为 int 数组
【发布时间】:2012-09-28 23:28:40
【问题描述】:

我想将 const unsigned int* 数组转换为 int* 数组。 但是,static_castconst_cast 失败了。

const unsigned int* getArray()
{
  static unsigned int a[3];
  a[0] = 0;
  a[1] = 1;
  a[2] = 2;
  return a;
}
int main()
{
  const unsigned int * a = getArray();
  const_cast<int*>(a); // fail
  static_cast<int*>(a); // fail
}

【问题讨论】:

  • 那是你的真实代码吗? getArray 甚至没有 return 声明。除此之外,返回一个局部变量的地址(就像你打算做的那样)是个坏消息。
  • @CarlNorum getArray() 只是为了替换对我无法控制的更大库的调用。 -- 我同意传递原始指针并不好。
  • 传递指针很好。返回指向局部变量的指针不是。为什么不直接用static 声明a?那么它将是正确的,不会混淆未来的读者。

标签: arrays casting integer constants unsigned-integer


【解决方案1】:
  1. const_cast 不能更改类型,只能更改 constness。
  2. static_cast 不能带走const,也不能在这些指针类型之间切换。

你想要的样子是:

int *b = reinterpret_cast<int *>(const_cast<unsigned int *>(a));

在这种情况下,您也可以只使用 C 风格的转换:

int *b = (int *)a;

【讨论】:

  • 那么将两者连接起来可能有效吗?这个unsigned int * b = const_cast&lt;unsigned int*&gt;(a); 至少抛弃了const,而这个int * c = static_cast&lt;int*&gt;(b); 仍然失败。我会调整这个问题。
  • 不,您也不能使用static_cast 更改指针类型。编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2015-12-01
相关资源
最近更新 更多