隐式共享:
隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。
隐式数据共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递了数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。
数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。
隐式共享技术可以大大降低对内存的开销以及,CPU资源的消耗,很大程度提高应用程序的运行效率。
QString类保存了16位的Unicode值(宽字节),Unicode把所有语言都统一到一套编码里,Unicode提供UTF-8、UTF-16、UTF-32编码方式。
UTF-8以字节为单位对Unicode进行编码,对不同范围的字体使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。
代码示例
QString s = "Hello";//Hello数据块引用计数为1
QString s1 = s;//Hello数据块引用计数为2
QString s2 = s;//Hello数据块引用计数为3
//其中一个进行球盖
s2 = "He";//不在引用Hello这个数据块,Hello数据块引用-1,He数据块引用计数为1
QString s3 = s;//Hello数据块引用计数为3
QString s4 = s2;//He数据块引用计数为2
QString s5 = s2;//He数据块引用计数为2
初始化
//const char* 初始化
QString s = "hello";
QString str("test");
//QChar数组初始化
QChar cHi[3] = {'h','i'};
QString strHi(cHi,2);Z
//类对象初始化
QString s1 = s;
转换
//QString转数字
QString strAge("18");
int nAge = strAge.toInt();//默认是10进制
QString strRate("3.14");
float nRate = strRate.toFloat();
QString strDouble("3.333");
double strD = strDouble.toDouble();
//数字转QString
int year = 2022;
float height = 1.70f;
QString strYear;
strYear = strYear.number(year);
QString strHeight;
strHeight = strHeight.number(height);
QString strTest;
strTest = strTest.setNum(year);
//QString转QByteArray
QString strTom = "Tom";
QByteArray tomArray = strTom.toUtf8();
const char* cTom = tomArray.data();
//QString转QDataTime
QString strTime = "1949-10-01 10:00:00";
QDateTime dtTime = QDateTime::fromString(strTime,"yyyy-MM-dd hh:mm:ss");
//QDateTime转QString
QDateTime dtCurrent = QDateTime::currentDateTime();
QString strCurrent = dtCurrent.toString("yyyy-MM-dd hh:mm:ss");
常用方法
//QString的拼接
QString s = "对不起";
s += "我是警察。";
s.append("Sorry。");// 结尾添加
//QString格式化
QString s0;
s0.sprintf("%s%d%s","我",19,"岁了。");
QString s1;
s1 = QString("%1%2%3").arg("我").arg(19).arg("岁了。");
//以索引方式访问
QChar qc1= s1.at(1);
//插入字符
QString s2= "我岁了。";
QString s3 = "19";
s2.insert(1,s3.toUtf8());
//在字符串起始位置插入
s2.prepend("今年");
//指定位置进行替换
s2.replace(0,2,"去年");
//去除字符串两端的空格,中间的空格变为一个空格
s2.trimmed();
//查询字符
QString s4 = "哔哩哔哩关注快乐的威猛先生";
//查询是否以xx开头,BOOL
qDebug()<