【Qt】警告Missing reference in range-for with non trivial type
Missing reference in range-for with non trivial type (QString) 警告
原始代码如下,
QStringList fileList = QFileDialog::getOpenFileNames(this, title, curPath, filter);
for (QString i : fileList)
{ui->plainTextEdit->appendPlainText(i);
}
根据IDE语法建议修改成如下代码,警告消失,
for (const QString &i : fileList)
{ui->plainTextEdit->appendPlainText(i);
}
感觉重点在引用上面,于是将const去掉,果然还是正确的,
for (QString &i : fileList)
{ui->plainTextEdit->appendPlainText(i);
}
那么为什么需要在范围循环语句(range-for)中让遍历元素使用引用呢?
首先,non trivial type 是“有意义类型”的意思,即显式提供了构造函数或存在虚函数、虚基类等情况,总之non trivial在进行拷贝时比trivial要慢。
很明显,QString就属于non trivial type。
当我们在使用范围循环语句(range-for)遍历容器时,如果不使用引用(QString i : fileList),会导致每次遍历容器中对象都会进行一次值拷贝,这种值拷贝对于开销non trivial type尤为明显,并且如果需要在遍历过程中修改容器元素的值,那么很显然值拷贝做不到。
使用引用(QString &i)来遍历容器,即使用变量别名访问容器中元素,既可以避免值拷贝的无意义开销也可以直接操作到容器中的元素。当不需要修改容器中元素时,使用(const QString &i)更为合理。
总结:
范围循环语句(range-for)中使用引用可以避免无意义的开销
当需要修改容器中元素,应当使用引用
trivial与non-trivial
trivial的大致意思就是:无关痛痒
1.构造函数: ctor
2.拷贝构造函数: copy
3.赋值运算符重载: assigment
4.析构函数: dtor
基本内置类型的这四种函数都是trivial类型的,自定义类型的类就有点模糊了! 不过呢,总结出来符合下面几个条件的就是 non-trivial函数
1.显示的定义了这四种函数.
2,类中有非静态非POD的数据成员.
3.拥有带有虚函数的基类.
而POD的意思就是Plain Old Data,也就是C++的内建类型或传统的C结构体类型. POD类型必然有trivial ctor/copy/dtor/assignemnt函数.
参考:
https://www.zhihu.com/question/438300953
https://blog.csdn.net/a627088424/article/details/48595525
https://stackoverflow.com/questions/3899223/what-is-a-non-trivial-constructor-in-c
https://blog.csdn.net/qq_37253168/article/details/121982291
https://blog.csdn.net/Dawn_sf/article/details/78881221
【Qt】警告Missing reference in range-for with non trivial type相关推荐
- C++ for循环警告:Missing reference in range-for with non trivial type (QString)
在qtcreator 中写了一个for循环,提示警告:Missing reference in range-for with non trivial type (QString) 如下图: 代码如下: ...
- 样式表(05):【纲】Qt Style Sheets Reference [官翻]
文章目录 定制样式的小部件列表 属性列表 图标列表 属性类型列表 伪状态列表 子控件列表 Qt Style Sheets Reference Qt样式表支持各种属性.伪状态和子控件,使得定制小部件的外 ...
- 编译时出现警告missing return statement at end of non-void function
编译时出现警告missing return statement at end of non-void function 解决办法 解决办法 1.首先检测程序逻辑,有没有可能出现一些情况会导致程序没有返 ...
- leetcode报错:reference binding to misaligned address 0xbebebebebebec0ba for type ‘int‘, which requir 4
leetcode,剑指offer 31题报错: Line 170: Char 16: runtime error: reference binding to misaligned address 0x ...
- Qt Creator老是提示红色信息In included file:unknown type name ‘b‘,怎么解决?
1.问题描述 如题,Qt Creator老是提示红色信息In included file:unknown type name 'b',怎么解决? 2.解决方法 其实这些提示信息,不会影响源码的编译,但 ...
- 【Qt】undefined reference to `vtable for xxx’
00. 目录 文章目录 00. 目录 01. 问题描述 02. 问题分析 03. 问题解决 04. 预留 05. 附录 01. 问题描述 编译Qt项目的时候,出现undefined reference ...
- Qt下Undefined reference to 'vtable for xxx'
QT下遇到这种错误提示时候需要注意以下情况: 一.cpp文件里使用了Q_OBJECT 分析:qmake不会处理.cpp文件里的Q_OBJECT,所以如果在.cpp文件中有它的话将会产生undefine ...
- QT出现“undefined reference to `vtable for’”解决方法
Qt 中新建类时,若需要使用信号与槽机制,必须显式启用Q_OBJECT宏.利用QT IDE添加并创建新的类时,在编译过程中会出现以下报错: undefined reference to `vtable ...
- 单片机声明数组可变长度c语言keil,单片机用byte定义数组keil编译警告 missing';'before...
警告如下: missing';'before sz 单片机源码如下: #include #include "intrins.h" int x; sbit d6=P2^6; sbit ...
- Qt警告提示:找不到“stddef.h”头文件,操蛋得很~~~
RT,Qt提示找不到"stddef.h"头文件,操蛋得很~~~ [root@fedora workspace]# find / -name stddef.h /usr/includ ...
最新文章
- 调度框架学习笔记(3)—— 集群调度框架的架构演进过程
- Python设计模式-单例模式
- Xamarin.Forms的ActivityIndicator和ProgressBar比较
- 作为软件设计师的2013年终总结
- 唤起你对c#曾经的记忆
- It was in 2006, and as a desktop computer
- 【转】ZooKeeper学习第二期--Zookeeper命令操作
- HTK语音识别基础教程.ppt
- win7 计算机定时关机脚本,win7定时关机命令是什么 如何设置定时关机【图解】...
- OpenGL采样贴图显示不出来
- 微信公众号运营都有哪些渠道,来提升公众号的粉丝量
- MS4200 PCI串口卡驱动
- 郭天祥的10天学会51单片机_第五节
- poi导出Excel,表格画斜线,并设置数据
- OV426+OVM6946基于FPGA调试成像
- HTTP协议 (五) ---代理
- IEEE认证Pdf格式失败问题
- 扫地机器人的构造及核心技术详解
- JavaScript parseInt和parseFloat用法
- 全新全球电竞赛事--世界超级联赛WSL发布首项赛事计划
热门文章
- prisma 风格设置_Prisma中的身份验证-第1部分:设置
- [语义分割]CTNet: Context-based Tandem Network for Semantic Segmentation
- 即将毕业大学生的第一个五年计划
- 2020年,抖音赚钱全攻略,做抖音,看这就够了!
- maxwell采集mysql binlog 日志数据到kafka topic
- 【Strategy模式】C++设计模式——策略模式
- Docker 中 latest 标签引发的困惑
- Gradle dependencies 解决项目依赖冲突
- 批量替换 Word 文档某几页
- 用计算机写作文主题,《用计算机写作文》教学设计(周未定)