use*_*522 10 c++ language-lawyer temporary-objects
[class.temporary]/7中当前的 C++ 标准草案包含短语
除函数参数对象之外的临时对象
我的印象是函数参数对象不是临时对象。然而,这个短语是最近才添加的。那么我是否错误或误解了上下文?
[stmt.ranged] 中的示例说明了 CWG 的意图:
using T = std::list<int>;
const T& f1(const T& t) { return t; }
const T& f2(T t) { return t; }
T g();
void foo() {
for (auto e : f1(g())) {} // OK, lifetime of return value of g() extended
for (auto e : f2(g())) {} // undefined behavior
}
Run Code Online (Sandbox Code Playgroud)
所以“除了函数参数对象之外”的措辞是指 的t参数f2。
我认为OP是对的,这实际上不是一个临时对象;它不属于[class.temporary]/1中提到的任何类别。然而,在某些实现上,函数参数对象具有类似临时的特征,因为它可能在包含调用的完整表达式的末尾被销毁,而不是在您期望的块变量处被销毁。我认为这就是 CWG 试图在此解决的问题。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |