Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;可变关键字如何影响容器的性能?_C++_Mutable - Fatal编程技术网

C++ C++;可变关键字如何影响容器的性能?

C++ C++;可变关键字如何影响容器的性能?,c++,mutable,C++,Mutable,我想知道可变内容如何影响容器(映射、向量、列表等等)。另外,我必须记住什么?可变的,就像常量,只是编译时的事情。它只允许您在常量上下文中修改该变量。在运行时,您是否声明了容器mutable没有区别 class Foo{ mutable int i; public: void foo() const{ // constant context, but you can modify `i` i = 5; } }; 一般来说,人们会写一些关于可变关键字的书,也许你可以缩

我想知道可变内容如何影响容器(映射、向量、列表等等)。另外,我必须记住什么?

可变的
,就像
常量
,只是编译时的事情。它只允许您在常量上下文中修改该变量。在运行时,您是否声明了容器
mutable
没有区别

class Foo{
  mutable int i;

public:
  void foo() const{
    // constant context, but you can modify `i`
    i = 5;
  }
};

一般来说,人们会写一些关于可变关键字的书,也许你可以缩小它的范围,用一些代码来说明在你的特定情况下这是怎么回事。它也可以作为优化器的提示。它确实影响优化器的功能。有(至少在理论上)您可以在不可变对象上进行一些优化(从最广泛的意义上讲),如果将这些优化应用于具有
可变
成员的
const
对象,可能会破坏代码。然而,我对编译器的实现还不够熟悉,无法判断它们的实现程度。然而,这个问题正是出于这个原因。我的理解是,在一般情况下,const(以及它的反面,mutable)不能用于启用额外的优化,因为编译器必须考虑到这样一个事实,即可能有人在某个地方抛弃了const。@ildjam你是对的,我忘记了为什么const通常不能帮助编译器优化的原因。它没有帮助的实际原因如下: