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++
回答ありがとうございます