Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果指定一个值类型不同的分配器,会发生什么情况?_C++ - Fatal编程技术网

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很不错。不过,我认为没有必要在回答中包含这一点,任何怀疑这一点的人都会看到你的评论:)这始终是未定义的行为。不管编译器做什么。