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,它既没有提供背景,也没有可靠的答案。