• 3230阅读
  • 4回复

QList的at函数是返回引用,但是实际有问题 [复制链接]

上一主题 下一主题
离线stlcours
 

只看楼主 倒序阅读 楼主  发表于: 2014-12-17
const T &    at ( int i ) const
----------------------------------
实际代码如下:
    QList< QStringList > m_showlist;
    QStringList sss1,sss2;
    sss1 << "111" << "222";
    sss2 << "333" << "444";
    m_showlist.push_back(sss1);
    m_showlist.push_back(sss2);

    for (int i=0; i<m_showlist.count(); i++) {
        QStringList sss = m_showlist.at(i);    
        qDebug() << " old : " << sss;
        sss[1] = "jjj"; // 这里,修改无效,这是怎么回事???
        qDebug() << " new : " << m_showlist.at(i);
    }

    for (int i=0; i<m_showlist.count(); i++) {
        qDebug() << " old : " << m_showlist.at(i);
        m_showlist[1] = "jjj"; // 修改有效
        qDebug() << " new : " << m_showlist.at(i);
    }
离线dbzhang800

只看该作者 1楼 发表于: 2014-12-17
呵呵,不是at有问题,是你的代码有问题。C++基本功不太扎实造成的

首先: at() 返回的是 const 引用 const T&,而不是 T&
其次:即使at() 返回的是 T& ,你的 sss 定义的也不是引用啊
离线cahwxy

只看该作者 2楼 发表于: 2014-12-17
LS说的是正确的,

补充一下,下面那段代码为什么可以行,是因为[] 操作符返回的类型有 cont& 和 non-const &,所以修改生效的。
离线kimtaikee

只看该作者 3楼 发表于: 2014-12-17
一同事最近也问了我一类似的问题,当时我就震惊了,工作好几年就这基本功......

离线roywillow

只看该作者 4楼 发表于: 2014-12-17
Qt的容器类提供at()的目的我记得就是为了防止错误的修改和提升效率
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个