以下代码使用Visual Studio 2013进行编译。
#include <vector>
#include <string>
int main()
{
const std::string constString("fred");
const std::vector<const std::string> myVector{ constString };
}
如果我尝试使用Visual Studio 2015编译它,则会报告以下错误:
1>xmemory0(587): error C2338: The C++ Standard forbids containers of const elements because allocator<const T> is ill-formed.
我见过各种帖子,特别是这个帖子Does C++11 allow vector<const T>?,关于vector<const T>
以及为什么不允许这样做,但我真的没有。但是,在上面的例子中,向量本身是常量。
有人可以解释一下吗? VS 2013成功编译是错误的吗?
答案 0 :(得分:1)
Standard Requirement for T
======== =================
C++03 any type
C++11 any non-const, non-reference object type
C++14 any non-const object type
C++17 any cv-unqualified object type
标准中的任何地方都没有例外
当容器本身为const
所以是的,VS 2013无法成功编译。