d的右值引用

右值属性

开关:-preview=rvalueattribute,
代码:

struct S {}

void func(@rvalue ref S p);
@rvalue ref S func();

S a;
auto b = cast(@rvalue ref)a;

void gun(@rvalue ref S p)
{
    enum r = __traits(isRvalueRef, p);
}

void func()(auto @rvalue ref S p);
auto @rvalue ref S func();

右值引用仅用于函数参数/函数返回,
右值引用仅接收右值或右值引用.
这里的右值引用为:
1,转换(@右值引用)表达式
2,返回右值引用的函数.
右值引用函数仅返回右值引用
右值引用,可用引用重载,但不能用值参数重载.
仅左值可以转换(@右值引用)
__特征(是右值引用)@右值引用,返回
__特征(取属性)调用带@右值引用的函数参数时,包含这个属性,
当函数返回带@右值引用的函数时,__特征(取函数属性)也有这个属性.
动 引用参数保留他们语义,如果是动 @右值引用,则扩展为:
1,如果接收的参数是左值,则为引用.
2,如为右值,则为右值引用.
动 引用在函数返回时,如返回是引用,则引用,如返回表达式右值引用,则为@右值引用,右值,则为,这里不知道,是不是有问题?
动 引用动 @右值引用是同义的,因为它们不像参数冲突,他们并不冲突.

右值类型构造器

编译器开关-preview=rvaluetype.

struct S {}
void func(@rvalue ref S p);
ref @rvalue(S) func();

S a;
auto b = cast(@rvalue)a;
void gun(ref @rvalue(S) p)
{
    enum r = is(typeof(p) == @rvalue);
}
const(@rvalue(S))* var;

void func()(auto ref @rvalue(S) p);
auto ref @rvalue(S) func();

assert(typeid(@rvalue(int)).toString() == "@rvalue(int)");

static assert(is(@rvalue(S) : S));
static assert(!is(@rvalue(S)* : S*));

语义总结:
@右值类型构造器:
-提供两种语法,即@右值__右值,TBR保留一种.
-,除了用作函数参数,不能用@右值声明变量.但可声明指向@右值型的指针(如:@右值(T)*).
-数组和关联数组元素类型不能为@右值.
-@右值引用参数地址是右值指针(@右值(T)*).
-对@右值类型is(T==@右值).
-转换(@右值)会加入@右值.
-具型()能识别@右值.
-右值隐式转换,只能转换至没有右值
其余见上面.都不变

完美转发要求的右值引用不用在每一级复制/移动.动 @右值引用可完美转发.
绑定右值到引用是个单独问题.即使在C++中,也存在右值引用和常 引用.
已实现移动语义和完美转发的核心.任何语法只是解析下.例如,用@移动属性(可替代右值引用).
d的示例

import std;
void main(){
	string text = "Helo World!";
	auto e=Base64.encode(text.representation);
    //base64,ubyte[],string->char[]
	auto d=Base64URL.decode("TWFyY29uZQ==");
	writeln(e); // prints: "TWFyY29uZQ=="
	writeln(to!string(d)); // prints: [77, 97, 114, 99, 111, 110, 101] but I want to print: "Helo World!"
    writeln(cast(string)d);
}

posted @   zjh6  阅读(15)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示