考虑下面的代码:是否可以存储一组指针导致未定义的行为?
#include <iostream>
int main(int argc, char ** argv) {
std::set<int*> ints;
for (int i = 0; i < 10; i ++) {
int * k = new int(i);
ints.insert(k);
}
for (auto i : ints) {
// some order-sensitive operations, for example:
std::cout << (*i) << " ";
}
return 0;
}
当第二环是其中的元件从该组所采取的顺序是敏感的。在程序的不同运行中,执行这种程序的结果可能会有所不同吗?
据我所知,std::set
内部排序元素。由于内存中的分配不一定会增加地址,所以可能(但不太可能),该程序的输出不会是0 1 2 3 4 5 6 7 8 9
?
我会说,即使顺序可能是不确定的,它仍然不是通常意义上的未定义行为(HTTP ://en.wikipedia。组织/维基/ Undefined_behavior)。 – Reunanen 2013-02-26 10:45:48
@Pukku是的,我用了错误的名词。它更接近“未指定”的行为。 – Saage 2013-02-26 10:56:45