gpt4 book ai didi

d - 在D中结合不可变和普通构造函数?

转载 作者:行者123 更新时间:2023-12-04 23:52:26 26 4
gpt4 key购买 nike

是否可以编写一个构造函数而不是两个构造函数,并且仍然能够创建普通对象和不可变对象(immutable对象)?编写普通的和不可变的构造函数是很多重复的工作。

class ExampleClass
{
void print() const
{
writeln(i);
}

this(int n)
{
i = n * 5;
}

this(int n) immutable
{
i = n * 5;
}

private:
int i;
}

最佳答案

使构造函数pure它可以隐式转换为任何限定符。

this(int n) pure
{
i = n * 5;
}

auto i = new immutable ExampleClass(2);
auto m = new ExampleClass(3);

记录在这里:
http://dlang.org/class.html “如果构造函数可以创建唯一对象(例如,如果它是纯对象),则该对象可以隐式转换为任何限定符。”

BTW:其他纯函数的返回值也隐式转换。
// returns mutable...
char[] cool() pure {
return ['c', 'o', 'o', 'l'];
}

void main() {
char[] c = cool(); // so this obviously works
string i = cool(); // but since it is pure, this works too
}

那里的工作原理相同,它是独一无二的,因此也可以假定它是共享的或不可变的。

关于d - 在D中结合不可变和普通构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20938149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com