0
点赞
收藏
分享

微信扫一扫

d参数到参数导致错误赋值


​​原文​​

@safe:
int global;

auto f(int* x, int* y)
{//xy推导为域.
x = y;
global++; // 确保不是从pure中推导为域
}

void g(scope int* z)
{
f(z, z); // 通过
}

按​​scope​​​显式标记​​x和y​​​时,会出错:把​​x​​​域赋值给生命期更长的​​y​​​变量.
显然,推导​​​域参数​​​并不关心​​参数​​​的相对生命期,这在具有​​析构函数​​​时是​​有问题​​的.


举报

相关推荐

0 条评论