C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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它不是运行时的,它更可能是编译器的提示,但是这个关键字并没有真正帮助你设计新的数据结构或以不可变的方式使用数据结构
> swap对临时工作不起作用,这对我来说是一个很大的缺点

我也不知道其他关键字/功能对这种设计有多大帮助,交换是其中一个非常接近好的东西,所以我至少可以开始写一些东西,但显然它仅限于左值.

所以我问:用C函数方法设计C 11中的不可变数据结构是可能的吗?

解决方法

您只需使用私有成员变量声明一个类,并且您不提供任何方法来更改这些私有成员的值.而已.只从类的构造函数初始化成员.没有人能够以这种方式改变班级的数据. C创建不可变对象的工具是成员的私有可见性.

可变:这是C中最大的黑客攻击之一.我一生中最多看到两个地方,它的使用是合理的,这个关键字几乎与你所寻找的相反.如果要在C中搜索一个帮助您在编译时标记数据成员的关键字,那么您正在搜索const关键字.如果将类成员标记为const,则只能从构造函数的INITIALIZER LIST初始化它,并且在实例的整个生命周期内都不能再修改它们.而这不是C 11,它是纯粹的C.没有神奇的语言功能来提供不变性,你只能通过巧妙的编程来实现.

大佬总结

以上是大佬教程为你收集整理的C 11中不可变的“功能”数据结构全部内容,希望文章能够帮你解决C 11中不可变的“功能”数据结构所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: