2310D必须在构造器中初化嵌套构的字段

编程入门 行业动态 更新时间:2024-10-26 14:26:56

2310D必须在构造器中初化<a href=https://www.elefans.com/category/jswz/34/1771299.html style=嵌套构的字段"/>

2310D必须在构造器中初化嵌套构的字段

原文
考虑该几乎最小的示例:

import std.algorithm;
import std.range;
import std.stdio;
struct S(Nested){Nested member; //`=I.init;`//取消注解无用int g;this(Nested member){this.member = member;}this(int g){this.g = g;version(fix)member = Nested.init;}
}
//`IFTI`处理映射类型
auto makeS(Nested)(Nested member) => S!(Nested)(member);
import std.sumtype;
//这只是工作,不需要修复
auto makeSum(I)(I i) => SumType!(string, I)(i);
void main(){auto input = iota(5).map!(b => b + 1).map!(b => b - 1);auto s = makeS(input);auto s2 = makeSum(input);writeln(s);writeln(s2);
}

rdmd -version=fix app.d运行代码可工作,但运行rdmd -version=fix app.d会产生:
错误:必须在构造器初化字段成员,因为它是嵌套构.
为什么?
我在规范中没有找到相关内容.

对不起,显然应该是:
使用rdmd -version=fix app.d运行代码可工作,但仅运行rdmd app.d会产生:
错误:必须在构造器初化字段成员,因为它是嵌套构.

嵌套构包含,在运行时需要初化环境指针.如果不初化它们,则用null设置指针,则结构就无法访问其环境.
使用.init并不能解决该问题,因为是在编译时确定的.init,并也让null替换环境指针.

我明白了,谢谢你的解释.
就我而言,不初化对象是有意义的,所以这不是问题.void初化可能更好表明意图,但编译器不允许.

更多推荐

2310D必须在构造器中初化嵌套构的字段

本文发布于:2023-12-03 23:06:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1658736.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   字段   器中

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!