临时对象,函数参数和隐式转换

pet*_*hen 2 c++

在以下场景中:

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

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

// ...
CallMeBar( GetFoo() );
Run Code Online (Sandbox Code Playgroud)

[编辑]修复了演员,d'oh [/ edit]

GetFoo返回Type Foo的临时对象.在CallMe返回之前,此对象是否存在?标准说什么?

我知道如果CallMe接受Foo,临时对象在CallMe返回之前不会被销毁.然而,我不确定隐式演员是否会改变这种情况,只有临时演员Bar能够继续存在.


一个典型的例子是Foo = CString,Bar = char*,即Bar引用由Foo持有(并由其释放)的数据.

CsT*_*mas 7

无论演员如何,CallMe()由于C++标准,临时对象将"生存"到函数调用中:

12.2.3 [...]临时对象被作为评估全文(1.9)的最后一步而被销毁,其中(词汇上)包含创建它们的点.[...]

1.9.12 表达是一种表达,不是另一种表达的子表达.