不是完整表达式的语句

Posted

技术标签:

【中文标题】不是完整表达式的语句【英文标题】:Statement that isn't a full-expression 【发布时间】:2017-02-28 20:04:40 【问题描述】:

经常听说在 C++ 中,临时对象在 full-expression 结束时被解构。 full-expression 被定义为不是某个其他表达式的子表达式的表达式。这听起来与我的语句的概念非常相似。

所以我的问题是:如果我将分号附加到 full-expression,它是否总是一个 语句?是否可以通过在末尾带有分号的 statement 并删除该分号来获得每个 full-expression?我可以假设每个临时文件都会一直存在到其语句结束吗?

【问题讨论】:

【参考方案1】:

这是一个比包含的临时生命周期更长的语句:

if (T() == T())
  foo();

条件中的表达式创建的两个临时对象在完整表达式结束时被销毁,并且在语句时不再存在(foo();)执行。

请注意,对于任何表达式ee; 是一个语句(即表达式语句,参见 [ stmt.expr])。

【讨论】:

嗯,很有趣。但是前两个问题呢?有没有不涉及任何类型的复合语句的例子? @TobiasBrüll:已更新。 哇,你刚刚去掉了花括号!虽然这在技术上可能是正确的,但这不是我的意思。 :) @TobiasBrüll:请问您想问什么 :-) @KerrekSB 那你能把其他两个问题联系起来吗?如果我将分号附加到完整表达式,它会...

以上是关于不是完整表达式的语句的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理-SELECT语句完整的句法

C语言三种循环结构的完整句子?

作业三总结

c语言中for语句里面有个k--+是啥意思?(完整是for(k=-1;k<0;k--+))

从给定字符串中提取 url 的 C# 正则表达式模式 - 不是完整的 html url,而是裸链接

OracleSQL 中Select语句完整的执行顺序