据我所知,C ++标准说只有在函数式转换( ISO / IEC 14882:2003,5.2.3 )的情况下,转换为void才是正确的。
但我在 C ++ 标准中找不到任何关于 C风格转换为void的内容。
在这种情况下,程序的行为只是实现定义了吗?
答案 0 :(得分:4)
据我了解,C ++标准说只有在函数式转换的情况下,转换为
void
才是正确的
不,可以通过static_cast
完成,也可以使用功能或演员表示法进行转换。
但我无法在C ++标准中找到关于C样式转换到
void
的任何内容。
由[expr.static.cast]为static_cast
定义,5.2.9 / 6:
任何表达式都可以显式转换为 cv
void
类型,在这种情况下它会成为废弃值 表达
[expr.cast],5.4,描述了C风格的演员阵容如何使用static_cast
,因此它对该风格也有效。 [expr.type.conv],5.2.3,描述了函数样式如何等同于C样式,因此它也适用于该样式。
(注意:章节编号是指C ++ 11(ISO / IEC 14882:2011),而不是您所指的C ++ 03,因为它是当前版本。其他版本可能不同,但可能不多。)