QList方法at()与[]的区别

发布于 2022-09-02 11:03:13 字数 1084 浏览 9 评论 0

代码如下:

QList<QVariant> *list;
    for(int i=startrow;i<rowcount+1;i++)
    {
        list=axExcel1.GetSelectSheetOneRowDate(1,i,startcolumn,startcolumn+columncount-1);
        int len=list->length();
        for(int j=0;j<len;j++)
        {
            qDebug()<<list->at(j);
        }
        delete list;list=NULL;
    }

其中

axExcel1.GetSelectSheetOneRowDate(1,i,startcolumn,startcolumn+columncount-1)

返回一个QList<QVariant>*指针,我用list去接收这个指针,然后解析list。
当我使用at()时程序不会崩溃,但当我改为[]访问时如以下代码,程序在进入循环当j=1时在就会崩溃,请问这at()与[]有什么区别?为什么会崩溃?

 qDebug()<<list->[j];
 

错误提示如下:

Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly

调试图片
图片描述
图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

但可醉心 2022-09-09 11:03:13

[]和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(); 
}
嘿哥们儿 2022-09-09 11:03:13

区别就是at进行了越界检查,[]没有

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文