c++ - 可以为了速度牺牲常量正确性吗?

标签 c++ oop optimization constants

我有一个工厂类,用于创建某个类的大量实例。创建过程非常困惑,可能需要相当长的时间。所以我认为将已经在工厂中创建的类的实例存储起来会很聪明,我可以在以后调用它们。

创建取决于单个参数(名称),因此可以将内容存储在 std::map 中,我称之为 old_instances

A A_factory::make_A(std::string const& name)
{
    if ( old_instances.find(name) != old_instances.end() )
    {
        return old_instances.find(name) -> second;
    }
    else
    {
        // obfuscated creation process that creates instance 'new_A'
        // ...

        old_instances.insert(std::pair<std::string, A>(name, new_A)); // <- problem
        return new_A;
    }
}

这里的问题是整个例程可能是工厂的 const 成员。但是因为 old_instances 被改编了。

为了这种微不足道的事情而牺牲函数的 const 特性,我觉得有点尴尬。 这些牺牲合乎逻辑吗?

如果这个问题太依赖口味,请不要拍我。

最佳答案

这是使用mutable 的经典示例。只要外部行为确实是 const 的行为,您就可以这样做。

关于c++ - 可以为了速度牺牲常量正确性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238873/

相关文章:

c++ - 在 Bison : Where to define the class? 中作为返回类型分类

c++ - `auto` 引用的说明符类型推导

c++ - 在 C++11 中将结构作为输出参数传递

C++设计问题: Passing functions via templates?

java - Java中将Element插入到Array的多个类中

c++ - 使用 for 循环删除对象数组

php - 在 Yii 的另一个 Controller 中调用函数

javascript - Chrome Profiler 中的 "Not optimized"警告是什么意思?

c - 在不使用宏的情况下简化和减少代码量

t-sql - 具有多个相似子查询的sproc的SQL优化