【问题标题】:C++ cast to voidC++ 强制转换为 void
【发布时间】:2014-09-30 08:07:01
【问题描述】:

据我了解,C++ 标准规定只有在函数式​​强制转换(ISO/IEC 14882:2003, 5.2.3)的情况下强制转换为 void 才是正确的。

但我在 C++ 标准中找不到关于 C 风格 强制转换为 void 的任何信息。

在这种情况下程序的行为是否仅由实现定义?

【问题讨论】:

  • 在进行 C 风格转换时,void 与任何其他类型一样,只是忽略了该值。
  • 但是在 C++ 标准中这个解释在哪里?

标签: c++ casting void


【解决方案1】:

据我了解,C++ 标准规定,只有在函数样式转换的情况下,转换为 void 才是正确的

不,它可以通过static_cast 完成,因此也可以通过使用函数式或强制转换表示法进行转换。

但我在 C++ 标准中找不到任何关于将 C 样式转换为 void 的信息。

由 [expr.static.cast], 5.2.9/6 为static_cast 定义:

任何表达式都可以显式转换为 cv void 类型,在这种情况下,它变成了废弃值 表达。

[expr.cast], 5.4,描述了 C 风格的演员如何使用static_cast,所以它也适用于那种风格。 [expr.type.conv], 5.2.3 描述了函数式风格如何等同于 C 风格,所以它也适用于那种风格。

(注意:章节编号指的是 C++11(ISO/IEC 14882:2011),而不是您指的 C++03,因为那是当前版本。其他版本可能不同,但可能不会很多。)

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多