d的@安全
作者:互联网
为什么不?给定:
int fun(string s) pure nothrow;
签名,可假定s
为域
,因为无逃逸
通道,返回值无指针
,纯
函数不能访问全局变量
,无其它赋值参数.
而签名为
int fun(string s) pure;
时,可赋值s
给异常
,如何避免/检测
它?
域推导
需要100%
,pure nothrow
不会破坏,只有抛
异常的pure
函数,才会失去免费
的域推导
.
给用户加任意
限制外,完全禁止pure throw
导致严格破坏超集.
只有在不纯
函数中抓异常时,才会打印异常的跟踪栈
.此时,副作用在,不使抛异常的函数(应该不纯,却未不纯)
不纯的地方.
纯
函数中也可抓
异常,抓块
中处理异常,与返回而不是抛
异常是一样的.
还有个问题:仍可赋值串
为非异常
可抛,并抛出.如果函数实现是@safe
,编译器会因为自动加域
而错误地避免了抛异常(应抛未抛
).考虑了它,即禁止断定
按消息用s
.允许则更差,可能断言成功
后访问过期
内存.
这是讨厌的疏忽.我希望不必完全取消基于scope
推导的pure
.由于每个程序只抛一次错误,因此可以
使断言程序消息串
为域
,这样想要
回溯时强制复制,但抛自定义可抛
类时,很难强制.
:可按返回值
建模异常.这是严格的局部重写.因此,与写入传入指针
内存相比,并未违反纯度
.
它们可返回
到比调用函数
更高域
.将破坏调用者
帧中栈内存
.@safe
禁止它.它
指的是通过可抛
逃逸的而不是从纯函数中抛出
的推导域参数
.
标签:函数,推导,不纯,安全,内存,pure,异常 来源: https://blog.csdn.net/fqbqrr/article/details/122390944