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

时间:2018-03-26 22:26:59

标签: c++ scope lifetime

想象一下场景:

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

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

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

当我调用f1()时,会创建一个类B的实例。然后,在返回时,创建并返回临时副本。现在我的问题是,因为我立即在返回的对象上调用f2(),它会在f2返回后立即被删除吗?或者它会活到范围的最后?是否有描述此场景的规则或者它是否依赖于编译器?

1 个答案:

答案 0 :(得分:3)

临时表演一直到完整表达结束,在你的情况下由;标记。因此代码非常安全,p将使用5进行初始化。

  

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

了解更多详情。

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