gpt4 book ai didi

c++ - 通过间接示例解释 C++ 可变性

转载 作者:太空狗 更新时间:2023-10-29 20:39:28 27 4
gpt4 key购买 nike

在 C++ 编程语言第 4 版的第 16.2.9.4 节“通过间接实现的可变性”中,有一个使用间接代替 mutable 关键字进行惰性求值的示例的草图。

struct cache {
bool valid;
string rep;
};

class Date {
public:
// ...
string string_rep() const;
private:
cache * c; // initialize in constructor
void compute_cache_value() const;
// ...
};

string Date::string_rep() const {
if (!c->valid) {
compute_cache_value();
c->valid = true;
}
return c->rep;
}

Full runnable example .

没有太多的解释:

Declaring a member mutable is most appropriate when only a small part of a representation of small object is allowed to change. More complicated cases are often better handled by placing the changing data in a separate object and accessing it directly.

我正在寻找更完整的解释。特别是,

  • 什么是小约束?是小内存还是小逻辑?
  • 在构造函数中初始化c 不会(在重要的程度上)克服惰性吗?也就是说,它确实可以发挥您许多人永远不需要的作用。
  • 为什么 c 是裸指针而不是像 unique_ptr 这样的东西?前面的章节做了一些努力来演示异常安全和 RAII。
  • 如果无论如何都要在构造函数中分配和初始化 c,为什么不直接使用 mutable cache c 成员呢?

换句话说,这是一个真实的模式还是一个人为的例子来证明间接性与常量性?

最佳答案

“小约束”不是真正的约束,只是提示如何编写代码(与使用的内存没有太大关系)。如果您的类有 30 个成员,其中 20 个是可变的,那么将它分成两个类(一个用于可变部分,一个用于其余部分)可能更有意义。

为什么它不是智能指针:不知道,但可能是书作者太累了:p

为什么它是一个指针:你是对的,没有必要。创建一个不带任何指针的可变缓存对象也可以,如果不需要任何类似指针的东西(比如从外部获取现有对象),指针只会增加另一种产生错误的可能性。

关于c++ - 通过间接示例解释 C++ 可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771371/

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