我有双向链表: http://dl.dropbox.com/u/16185759/list.h
以及其他类中的方法:
List<int> get_vertices()
{
Element<Edge*> *curr = edges->head;
List<int> vertices;
int v1, v2;
while (curr != 0)
{
v1 = curr->data->v1;
v2 = curr->data->v2;
if (vertices.has(v1) == false)
{
vertices.insert(v1);
}
if (vertices.has(v2) == false)
{
vertices.insert(v1);
}
curr = curr->next;
}
return vertices;
}
根据调试,方法尚未调用。
编译器会忽略它,代入值 false,如果最后删除返回 false,则一切正常。
该怎么办? 预先感谢
如果你删除最后的
return
,它似乎可以工作,因为你已经引发了未定义的行为,并且编译器可以做任何它想做的事:在这种情况下,它随机返回true。
问题似乎不在这段代码中,但很可能您要存储的数据类型的
operator==
与列表中的预期项目不完全匹配。对于浮点或用户数据类型来说可能是这样。
如果您使用GCC,您可以运行
g++ -fdump-tree-all
并获得大量(数百个)转储文件,其中包含GCC内部表示的文本演示,这样您就会了解正在发生哪些优化