d作者:解析dip1000的歧义
解决ref-return-scope
参数的歧义
按ref return scope
声明函数参数时,是return ref
还是return scope
?
考虑以下类型:
类型 | 意思 |
---|---|
P | 有间接 |
I | 无间接引用 |
X | 可能有或可能无间接寻址 |
当前这样解析:
a,P foo(ref return scope P p)=>ref returnScope
b,I foo(ref return scope P p)=>returnRef scope
c,ref X foo(ref return scope P p)=>returnRef scope
d,X foo(ref return scope I)=>returnRef
e,ref X foo(ref return scope I)=>returnRef
d,e
是根据删除scope
方式来解释,因为如果I不包含间接引用则无意义.
用T泛型时,麻烦就来了,且return
属性令人惊讶的在ref
和scope
间地来回移动.
b
,是因为不返回指针,scope
不必return
.同样泛型
有奇怪行为.
因为在@system
代码中来回
转换指针为ref
是合法的,a,c
会导致问题.
ref,return
和scope
可任意但不能多次出现,并与其他如const
属性混合.
该提议是,如果return
和ref
相邻,则结果就是returnRef
.同样,return
和scope
变成returnScope
.如果无这两种模式,则与a..e
行为相同.
同时拥有returnRef
和returnScope
仍然非法.
对构成员函数:
struct S {
T foo() return scope { ... }
}
第一参是ref S
.但可通过允许foo()
后接ref
来消歧,如下:
T foo() return ref scope { ... }
// returnRef scope
T foo() ref return scope { ... }
// ref returnScope
Dennis:
我确实喜欢找相邻的"返回域
"的想法.
但不喜欢a..e
规则背后复杂性,宁愿简化它而非加它,替代提案:有相邻return scope
关键字时,结果为ref returnScope
.其他一切都为returnRef scope
.如何?
可使用scope return
来使return Ref
为成员函数,不需要新语法.
W.B:
我想仅允许,"return ref"/"return scope"
,第1次迭代时后向兼容.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现