d语言的const,immutable修饰符
d语言的const,immutable修饰符
轻舞凋零 发表于2年前
d语言的const,immutable修饰符
  • 发表于 2年前
  • 阅读 16
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: d语言的const,immutable修饰符

参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me


import std.stdio;
import std.conv;

//const immutable share

struct Point { int x,y; }

class A{
	
	int a,b;
	string name;

	int[] fun(){
		return [1,2];
	}
	int [] gun() immutable{
		return [1,2];
	}
	immutable int[] hun(){
		return [1,2];
	}
	immutable(int)[] iun() immutable{
		return [1,2];
	}

	this() immutable{
		a = 1;
		b = 1;
		name = "immutable";
	}
	void setA(int a){
		this.a = a;
	}
}

struct S{
	private int[] a;
	this(immutable(S)source){
		a = to!(int[])(source.a);
	}
	this(S source) immutable{
		a = to!(immutable(int[])) (source.a);
	}
}

void print(immutable(int[]) data){
	writeln(data);
}
void printNew(const(int[]) data){
	writeln(data);
}

//inout change
inout(char)*strchr(inout(char)*input ,int c);



unittest {
	immutable (int[]) mydata = [10,20];
	print(mydata);
	printNew(mydata);
	printNew([1,2]);

	S aa;
	auto b = immutable(S) (aa);
	writeln(typeid(typeof(b.a)));
	auto c = S(b);
	writeln(typeid(typeof(c.a)));


	immutable(int) over = 1;
	//over++;
	auto bod = over;
	//bod++;
	immutable p = 1.25;
	auto stru_p = immutable(Point)(0,0);
	auto stru_p2 = stru_p;
	assert(is(typeof(stru_p2.x) == immutable(int)));

	alias immutable (int[]) T1;
	alias immutable (int)[] T2;

	T1 t1_a = [1,2,3];
	//t1_a[1] = 10;
	//t1_a = [4,5,6];
	T2 t2_a = [1,2,3];
	t2_a = [4,5,6];
	//t2_a[0] = 999;

	//can't modify immutable data
	auto objA = new immutable(A);
	//auto objB = new A();//error
	assert(objA.a == 1);
	//objA.setA(11); //error can't modify
	//objA.a = 11;//error

	//immutable change int to other
	int changeA = 1;
	immutable(int) changeB = changeA;
	assert(changeB == 1);
	int changeC = changeB;

	int[] arrA = [1];
	//immutable (int[]) arrB = arrA;






}


标签: D语言
共有 人打赏支持
粉丝 13
博文 99
码字总数 16794
×
轻舞凋零
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: