std::vector<const int> vci;
vci.push_back(1);
vci[0] = 2;
Run Code Online (Sandbox Code Playgroud)
对于元素类型const int
,不应该将赋值语句分配给const int&
?这不能使用LLVM 3.0进行编译.为什么VC++允许它?
虽然它是未定义的行为,基本上任何事情都可能发生,包括你所看到的,我已经跟踪到这似乎是图书馆与标准的不兼容.特别是VS2010库中定义的标准分配器不符合标准.
标准规定这std::vector<T,Allocator>::value_type
是一个typedef Allocator::value_type
.现在默认分配器(如果提供无)是std::allocator<T>
对于其中value_type
,根据表28必须是相同的至T.现在,VS2010中标准分配器的实现const
从类型参数中删除了限定符,因此std::allocator<const T>::value_type
是T
,而不是const T
.
重要的是要注意编译器不适合接受您自己提供的代码,因为它是未定义的行为,并且编译器可以随意执行.但另一方面,实施中存在不一致性std::allocator
.
您已经自己回答了这个问题:这是未定义的行为.编译器不需要提供诊断,操作的结果可以是任何内容.检测到类型不可分配并提供有意义的错误消息(或不提供)是实现质量的一种情况
归档时间: |
|
查看次数: |
115 次 |
最近记录: |