【问题标题】:Status of statement (void)f() in C++14, is it ill-formed? if not, is the f() part discard-value?C ++ 14中语句(void)f()的状态,它格式错误吗?如果不是,是 f() 部分丢弃值吗?
【发布时间】:2015-10-24 22:14:19
【问题描述】:

以下程序是否符合 C++14 标准?

int f() { return 42; }

int main() {
  (void)f();
}

如果不是,唯一的函数调用表达式是否包含在丢弃值表达式中? (注意是子表达式,不是整个表达式语句)

【问题讨论】:

  • 您是否有任何参考资料让您认为(void)f() 格式不正确?
  • @RSahu:void 是一个不完整的类型,所以:void t = f(); 格式不正确,因此我希望(void)x 的意思是(没有相反的措辞)创建一个临时类型的 void,这相当于前面提到的格式错误的void t = f();。但是在 C 中这是格式良好的,所以我不清楚。
  • @AndrewTomazos void t 不会是临时的(如果它是合法的)。 void 是表达式的有效类型。例如调用 void 函数。
  • 您还可以看到类似 (void)param; 的代码,以消除函数中关于未使用参数 param 的虚假警告,因此该表达式绝对是有效的 C++。

标签: c++ c++14


【解决方案1】:

以下程序是否符合 C++14 标准?

没有。如果您有一些特定的理由认为这可能是无效的,您可能会得到更详细的答案,但是引用标准的每一个句子以试图指出该句子不会使程序无效是没有生产力。

如果不是,唯一的函数调用表达式是否包含在丢弃值表达式中?

唯一的函数调用表达式丢弃值表达式。

5.2.9 静态转换 [expr.static.cast]

6 任何表达式都可以显式转换为 cv void 类型,在这种情况下,它变成了丢弃值表达式(第 5 条)。 [...]

我假设您已经知道 C 风格的转换会在可能的情况下执行 static_cast

【讨论】:

  • [expr.static.cast]/6 是我所追求的。感谢您的帮助。
猜你喜欢
  • 2012-08-22
  • 2015-11-08
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多