我写了一个函数,它返回QTextStream中的下一个字符。有:
QString peek(QTextStream *stream){
QString __str = '\0';
stream->seek(stream->pos() + 1);
__str = stream->read(1);
stream->seek(stream->pos() - 2);
stream->flush();
return __str;
}
例如,我有一个文件:
abcde
当我尝试在屏幕上显示功能结果时,输出正确:'b'。 但是当我尝试输出下一个字符然后输出第一个字符时,就像那样:
/* Any function to output */(peek(file) + file->read(1));
输出为:“ca”而不是“ba”。
怎么了?
对不起,如果这是一个愚蠢的问题而且抱歉我的英语不好:)
答案 0 :(得分:1)
未定义下面表达式中的参数评估顺序。它不必从左到右,根本不是。
peek(file) + file->read(1)
在你的情况下,首先执行读取,推进位置,然后偷看得到'c'
而不是'b'
。
你需要将其分解:
QString result = peek(file);
result += file->read(1);
Q_ASSERT(result == "ba");