C++ 如果指定一个值类型不同的分配器,会发生什么情况?
假设我声明C++ 如果指定一个值类型不同的分配器,会发生什么情况?,c++,C++,假设我声明std::vector。会发生什么更糟糕的事情?我运行了它,似乎没有遇到任何内存错误 我猜编译器对其进行了隐式优化,但最坏的情况是未定义的行为它会导致未定义的行为。对于支持分配器的容器,如vector,标准在表99中规定: 要求:allocator\u type::value\u type与X::value\u type相同 (请注意,同一行还指定分配器\u type必须是容器专用化的模板参数的类型定义) 根据[res.on.functions]/2: 特别是在以下情况下,效果是未定义
std::vector
。会发生什么更糟糕的事情?我运行了它,似乎没有遇到任何内存错误 我猜编译器对其进行了隐式优化,但最坏的情况是未定义的行为它会导致未定义的行为。对于支持分配器的容器,如vector
,标准在表99中规定:
要求:allocator\u type::value\u type
与X::value\u type
相同
(请注意,同一行还指定分配器\u type
必须是容器专用化的模板参数的类型定义)根据[res.on.functions]/2: 特别是在以下情况下,效果是未定义的:
[…]
- 用于实例化模板时用作模板参数的类型 组件,如果类型上的操作未实现 适用要求子条款(17.6.3.5、23.2、, 24.2,26.2)
为了完整起见,
23.2.1[container.requirements.general]
第14段表明,您提到的要求适用于std::vector
:除array
之外,本条和(21.4)中定义的所有容器都满足支持分配器的容器的附加要求,如表99所述。@BoBTFish很不错。不过,我认为没有必要在回答中包含这一点,任何怀疑这一点的人都会看到你的评论:)这始终是未定义的行为。不管编译器做什么。