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

 平凡的稳健投资 发布于 2022-11-03 21:58

代码如下:

QList *list;
    for(int i=startrow;ilength();
        for(int j=0;jat(j);
        }
        delete list;list=NULL;
    }

其中

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

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

 qDebug()<[j];
 

错误提示如下:

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

调试图片

2 个回答
  • 区别就是at进行了越界检查,[]没有

    2022-11-06 04:04 回答
  • []和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-11-06 04:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有