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属性令人惊讶的在refscope间地来回移动.
b,是因为不返回指针,scope不必return.同样泛型有奇怪行为.
因为在@system代码中来回转换指针为ref是合法的,a,c会导致问题.
ref,returnscope可任意但不能多次出现,并与其他如const属性混合.
该提议是,如果returnref相邻,则结果就是returnRef.同样,returnscope变成returnScope.如果无这两种模式,则与a..e行为相同.
同时拥有returnRefreturnScope仍然非法.
对构成员函数:

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次迭代时后向兼容.

posted @   zjh6  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示