不是完整表达式的语句
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();
)执行。
请注意,对于任何表达式e
,e
;
是一个语句(即表达式语句,参见 [ stmt.expr])。
【讨论】:
嗯,很有趣。但是前两个问题呢?有没有不涉及任何类型的复合语句的例子? @TobiasBrüll:已更新。 哇,你刚刚去掉了花括号!虽然这在技术上可能是正确的,但这不是我的意思。 :) @TobiasBrüll:请问您想问什么 :-) @KerrekSB 那你能把其他两个问题联系起来吗?如果我将分号附加到完整表达式,它会...以上是关于不是完整表达式的语句的主要内容,如果未能解决你的问题,请参考以下文章
c语言中for语句里面有个k--+是啥意思?(完整是for(k=-1;k<0;k--+))