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
.
初始化
见
了解更多详情。
编辑:除了@Remy 的评论外,您的代码有效,请阅读 Most vexing parse 了解更多详情。
想象一个场景:
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
.
见
了解更多详情。
编辑:除了@Remy 的评论外,您的代码有效,请阅读 Most vexing parse 了解更多详情。