我正在尝试做的是递归处理列表.我是python的新手,所以当所有代码都被编写并发送执行时,我遇到了一个奇怪的问题:在调用递归函数后,列表返回了更改.为了测试这个,我写道:
def recur(n):
n.append(len(n))
print '>',n
if n[-1]<5: recur(n)
print '<',n
Run Code Online (Sandbox Code Playgroud)
并称为功能:
recur([])
Run Code Online (Sandbox Code Playgroud)
结果如下:
> [0]
> [0, 1]
> [0, 1, 2]
> [0, 1, 2, 3]
> [0, 1, 2, 3, 4]
> [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, …Run Code Online (Sandbox Code Playgroud) 当我们将由临时智能指针管理的对象通过原始指针或引用传递给函数时,标准是否保证该对象的生存期将延长至函数生存期?
#include <iostream>
#include <memory>
struct A {
~A() {
std::cout << "~A()" << std::endl;
}
};
std::unique_ptr<A> makeA() {
return std::make_unique<A>();
}
void f(const A& a) {
std::cout << "f()" << std::endl;
}
int main() {
f(*makeA());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望一旦从A管理器实例unique_ptr获取到原始指针后,该实例将被销毁,因为它是临时的,并且未绑定到函数参数。所以输出可能是
~A()
f()
Run Code Online (Sandbox Code Playgroud)
但是gcc和clang都使它生效,直到函数结束,即输出为
f()
~A()
Run Code Online (Sandbox Code Playgroud)
因此,似乎临时智能指针没有被破坏。
为什么A实例(位于堆中)一直存活到函数结束?高度赞赏对该标准的一些参考。