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

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

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

【问题讨论】:

    标签: c++ expression raii temporary-objects


    【解决方案1】:

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

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

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

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

    【讨论】:

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