为什么C ++标准禁止使用const元素容器?

时间:2018-07-28 16:24:15

标签: c++ containers const language-lawyer

C ++ 11禁止使用const元素的容器背后的原理是什么?我指的是以下错误消息,如果您定义例如const元素的向量,则会得到该错误消息:

  

错误C2338:C ++标准禁止容器const元素,因为分配器的格式不正确。

如果您阅读类似的问题,答案通常会重复该错误消息,但绝不会详细介绍甚至无法解释引入static_assert的原因。定义const元素的容器似乎并不是一件不合理的事情,所以C ++ 11为什么禁止它?由于以前的版本中允许使用该限制,因此此限制的确切原因是什么?

以下是无法在VS2017中编译的示例代码:

#include "stdafx.h"
#include <vector>

struct foo {};

typedef std::vector<const foo> foo_vector;

int main(int argc, char** argv)
{
    foo_vector v;
    return 0;
}

关于possibly duplicate question,它既没有提供背景,也没有可靠的答案。

0 个答案:

没有答案