谁能解释一下,为什么下面的代码会根据复制 QStringList 产生不同的结果:
#include <stdio.h>
#include <QStringList>
bool qtTest(bool b)
{
QStringList list;
list.push_back("0");
list.push_back("1");
list.push_back("2");
QStringList::const_iterator it = list.end();
if (b) {
// 'static' to prevent optimization
static QStringList copy = list;
}
--it; // 2
--it; // 1
--it; // 0
++it; // 1
++it; // 2
--it; // 1
++it; // 2
++it; // end
return it == list.end();
}
int main(int, char *[])
{
printf("equality with copy: %d", qtTest(true));
printf("equality without copy: %d", qtTest(false));
return 0;
}
输出:
equality with copy: 0
equality without copy: 1
但是,无论复制如何,std::vector 都提供相同的输出。
Debian 7 x86 GCC x86 32 位 Qt 5.1.0 调试 qmake 规范 linux-g++
感谢您的回答