C 11中不可变的“功能”数据结构
我试图写下一些我对多线程/并发场景感兴趣的数据结构的实现.
很多函数式语言,我所知道的,都是以不可变的方式设计自己的数据结构,所以这意味着如果要为T的实例t1增加值,你真的会得到一个包含t1值的T的新实例. container t; container s = t; //t and s refer to the same container. t.add(value); //this makes a copy of t,and t is the copy 我在C 11中找不到合适的关键字;标准库中有关键字,语义和函数,它们明确地面向功能方法,特别是我发现: > mutable它不是运行时的,它更可能是编译器的提示,但是这个关键字并没有真正帮助你设计新的数据结构或以不可变的方式使用数据结构 我也不知道其他关键字/功能对这种设计有多大帮助,交换是其中一个非常接近好的东西,所以我至少可以开始写一些东西,但显然它仅限于左值. 所以我问:用C函数方法设计C 11中的不可变数据结构是可能的吗? 解决方法
您只需使用私有成员变量声明一个类,并且您不提供任何方法来更改这些私有成员的值.而已.只从类的构造函数初始化成员.没有人能够以这种方式改变班级的数据. C创建不可变对象的工具是成员的私有可见性.
可变:这是C中最大的黑客攻击之一.我一生中最多看到两个地方,它的使用是合理的,这个关键字几乎与你所寻找的相反.如果要在C中搜索一个帮助您在编译时标记数据成员的关键字,那么您正在搜索const关键字.如果将类成员标记为const,则只能从构造函数的INITIALIZER LIST初始化它,并且在实例的整个生命周期内都不能再修改它们.而这不是C 11,它是纯粹的C.没有神奇的语言功能来提供不变性,你只能通过巧妙的编程来实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |