gpt4 book ai didi

c++ - 临时对象、函数参数和隐式转换

转载 作者:太空狗 更新时间:2023-10-29 23:38:24 25 4
gpt4 key购买 nike

在以下场景中:

struct Foo
{
// ...
operator Bar() {... } // implicit cast to Bar
}

Foo GetFoo() { ... }
void CallMeBar(Bar x) { ... }

// ...
CallMeBar( GetFoo() );

[edit] 修复了转换运算符 d'oh[/edit]

GetFoo 返回一个 Foo 类型的临时对象。这个对象是否一直存在到 CallMe 返回之后?标准怎么说?

我理解如果 CallMe 接受 Foo,临时对象在 CallMe 返回之前不会被销毁。但是,我不确定隐式转换是否会改变这一点,并且只有临时 Bar 可以保证存活下来。


典型情况是 Foo = CString, Bar = char *,即 Bar 引用由 Foo 持有(并释放)的数据。

最佳答案

由于 C++ 标准,无论转换如何,临时对象都将在对 CallMe() 函数的调用中“存活”:

12.2.3 [...] 临时对象被销毁,作为评估包含它们创建点的完整表达式 (1.9) 的最后一步。 [...]

1.9.12 fullexpression 是不是另一个表达式的子表达式的表达式。

关于c++ - 临时对象、函数参数和隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com