Qt:关于引用、指针的一些tip

今天在开发的时候,需要将一个const QVariantList转为非const,然后遍历list修改i每一个list里value为“name”的值。但是在实际操作的时候,遇到了一些问题,最后发现,是我对一些函数的结果是引用还是指针,不太熟悉。

首先讲一下怎么把const转为非const,这里我并不像对原来的const函数有修改,所以采用拷贝构造。这里我有两种构造方法,第一种就是在调用的时候就提供一个非const的调用接口,直接获取非const的函数,第二种就是先获取const然后拷贝一下。其实原理都是一样的。

QVariantList ListCopy = obj.propertyList();//这里 `obj` 是你的类的一个对象,propertyList()为对应list的调用接口

按理说到这里之后,后面的操作就应该很简单了,但是很奇怪的是,我被卡住了。当时我的代码是这样的 

QVariantList nonConstList = node->unconstPropertyList();// 利用拷贝构造函数创建一个非const副本
for(auto var :nonConstList){
    var.toMap().insert("name",name);
    list.append(var);
    SCDebug<<var.toMap().value("name");
}

结果就是,输出的结果还是之前的。

最后询问GPT发现

1、for循环中 `var` 必须是一个引用类型才能修改原列表中的元素,否则 `var` 将是列表元素的一个副本,这样对 `var` 的修改不会影响原始列表中的元素。

2、`toMap()`函数返回的通常是一个值副本,而非引用,所以,尝试在这个副本上调用 `insert()` 并不会改变原始元素的map。

这两点是我根本没有注意的,平时for循环我都会加&,但是我一直认为的原因是让程序减少一次拷贝,没有想到副本。toMap返回的是副本,我也真的一直都不知道(狗头)。

所以最后经过修改,正确代码应该是

QVariantList nonConstList = node->unconstPropertyList();// 利用拷贝构造函数创建一个非const副本
for(auto &var :nonConstList){
    QVariantMap map = var.toMap();
    map.insert("name",name);
    list.append(map);
    SCDebug<<var.toMap().value("name");
}
_allList.append(list);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值