【问题标题】:How chained static_cast is well-defined?链式 static_cast 如何定义明确?
【发布时间】:2011-12-11 18:42:33
【问题描述】:

(5.2.9/10) 类型“指向 cv1 void”的右值可以转换为类型“指向 cv2 T”的右值,其中 T 是对象类型,而 cv2 与 cv 限定相同或大于 cv 限定, 简历1。指向对象的类型指针值转换为“指向 cv 的指针” void",回到原来的指针类型就会有它原来的 价值。

既然从void* 转换的结果是int*(原始指针类型)那么,是什么使以下转换有效?

int i = 10;
double *pd_2 = static_cast<double*>(static_cast<void*>(&i));

【问题讨论】:

  • 那个演员没有定义明确。
  • 我认为来自void* 的转换是实现定义的
  • 不,但这对我来说似乎是未定义的行为。

标签: c++ static-cast


【解决方案1】:

该演员表没有定义明确。

【讨论】:

  • 我认为这给我们留下了实现定义和未定义的行为。还是只是粗略地认为这样做“可以”?​​span>
  • @user1086635:我不记得是哪个了。但无论哪种方式,您可能都不应该编写执行此操作的代码。
  • 铸造应该没问题,只是试图取消引用 pd_2 会去 UB,因为它并不是真正的双 pd_2 指向它。
  • @Oli:无论如何,我会在你回来后接受这个答案。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2014-12-12
  • 2011-11-07
相关资源
最近更新 更多