想象一下场景:
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
返回后立即被删除吗?或者它会活到范围的最后?是否有描述此场景的规则或者它是否依赖于编译器?
答案 0 :(得分:3)
临时表演一直到完整表达结束,在你的情况下由;
标记。因此代码非常安全,p
将使用5
进行初始化。
见
了解更多详情。
编辑:除了@ Remy的评论之外,您的代码有效,请阅读Most vexing parse了解更多详情。