gpt4 book ai didi

c++ - QTextStream 和 Visual Studio 2008 Release模式

转载 作者:行者123 更新时间:2023-11-30 04:36:46 25 4
gpt4 key购买 nike

我有一个使用 QTextStream 的简单代码,它在 visual studio 中的 Debug模式下工作得很好,但如果我将它置于 Release模式,它不会从文件中读取任何内容。我为 Release模式和 Debug模式 QtCored4.lib 添加了 QtCore4.lib。我正在使用 Qt4.6.3 vs2008,如果它在 Debug模式下工作可能会出现什么问题?我在下面插入代码:

#include <iterator>
#include <QFile>
#include <QTextStream>
#include <QString>
#include<iostream>
#include<fstream>
#include<iterator>
#include<assert.h>
#include<stdio.h>
using namespace std;
void main()
{

QString qsArgsFile = "curexp.txt",line;
QByteArray baline;
cout<<qsArgsFile.toAscii().data();
QFile qfile( qsArgsFile );
assert(qfile.open( QIODevice::ReadOnly | QIODevice::Text));
QTextStream stream( &qfile );
baline = qfile.read(50);
const char *liner;
while(!(line = stream.readLine()).isNull())
if (!line.isEmpty()) {
baline = line.toLatin1();
liner = baline.data();
cout << liner << endl;
}

最佳答案

那是因为你把带有副作用的代码放到断言中:

assert(qfile.open( QIODevice::ReadOnly | QIODevice::Text));

此代码永远不会在 Release模式下执行。不仅断言被禁用,其中的代码也不会被执行!规则:永远不要在 assert() 中放入任何有副作用的东西。当某些东西在 Debug模式下工作但在 Release模式下不工作时,这是首先要寻找的东西。

如果你想断言,这样做:

const bool opened = qfile.open( QIODevice::ReadOnly | QIODevice::Text);
assert( opened );

关于c++ - QTextStream 和 Visual Studio 2008 Release模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4361335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com