gpt4 book ai didi

c++ - C++11 中不可变的 "functional"数据结构

转载 作者:太空狗 更新时间:2023-10-29 19:48:33 25 4
gpt4 key购买 nike

我试图写下我对多线程/并发场景感兴趣的几个数据结构的一些实现。

很多函数式语言,几乎我所知道的,都以不可变的方式设计它们自己的数据结构,所以这意味着如果你要添加 value到实例 t1T , 你真的得到了 T 的一个新实例包装t1 + value .

 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不适用于临时工,这对我来说是一个很大的缺点

我也不知道其他关键字/功能对这样的设计有多大帮助,swap其中之一真的接近好东西,所以我至少可以开始写一些东西,但显然它仅限于 lvalue .

所以我想问:是否可以使用函数式方法在 C++11 中设计不可变数据结构?

最佳答案

您只需声明一个带有私有(private)成员变量的类,而无需提供任何方法来更改这些私有(private)成员的值。就是这样。您只能从类的构造函数中初始化成员。没有人能够以这种方式更改类的数据。 C++创建不可变对象(immutable对象)的工具是成员的私有(private)可见性。

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

关于c++ - C++11 中不可变的 "functional"数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22159716/

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