C++ 会破坏给定化合物中的对象吗?

Does C++ destruct object in given compound?

想象一个场景:

class B {
  int f2() { return 5; }
}

class A {
  B f1() { B b1(); return b1; }
}

A var;
int p = var.f1().f2();

当我调用 f1() 时,会创建 class B 的一个实例。然后,在 return 上创建并 return 编辑了一个临时副本。现在我的问题是,因为我立即在那个 returned 对象上调用 f2(),它会立即被删除一次 f2 returns 吗?或者它会一直存在到范围结束吗?是否有任何规则描述这种情况,或者它是否依赖于编译器?

临时对象一直存在到完整表达式的末尾,在您的情况下由 ; 标记。所以代码是完全安全的, p 将用 5.

初始化

http://en.cppreference.com/w/cpp/language/lifetime

了解更多详情。

编辑:除了@Remy 的评论外,您的代码有效,请阅读 Most vexing parse 了解更多详情。