代码如下:
QList*list; for(int i=startrow;i length(); for(int j=0;j at(j); } delete list;list=NULL; }
其中
axExcel1.GetSelectSheetOneRowDate(1,i,startcolumn,startcolumn+columncount-1)
返回一个QList
当我使用at()时程序不会崩溃,但当我改为[]访问时如以下代码,程序在进入循环当j=1时在就会崩溃,请问这at()与[]有什么区别?为什么会崩溃?
qDebug()<[j];
错误提示如下:
Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
调试图片
区别就是at进行了越界检查,[]没有
[]和at语义差别不大,实现也是大同小异
来自qt官方的源码LINK
template <typename T>
inline const T &QList<T>::at(int i) const
{
Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::at", "index out of range");
return reinterpret_cast<Node *>(p.at(i))->t();
}
template <typename T>
inline const T &QList<T>::operator[](int i) const
{
Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::operator[]", "index out of range");
return reinterpret_cast<Node *>(p.at(i))->t();
}
template <typename T>
inline T &QList<T>::operator[](int i)
{
Q_ASSERT_X(i >= 0 && i < p.size(), "QList<T>::operator[]", "index out of range");
detach(); // 这里多了一步 !!
return reinterpret_cast<Node *>(p.at(i))->t();
}