C++函数传参的时候发现一个问题
//弹出文件对话框
QString filepath=QFileDialog::getOpenFileName(this,"我的文件对话框");
//创建QFile对象
QFile myfile(filepath);
//打开文件
myfile.open(QIODevice::ReadWrite);
//读取文件内容
QByteArray buf=myfile.readAll();
//把读取内容在文本浏览框和编辑框中显示出来
// setText(const QString &text) const QString &text=buf;
ui->textEdit->setText(buf);
ui->textBrowser->setText(buf);
比如 ui->textEdit->setText(buf);
setText(const QString &text)//函数声明
实际上传参过程 = const QString & x = QbyteArray;
为什么const QString &类型可以实现对QByteArray呢?他们不是类型不一样吗?类型不一样的也可以引用吗?
找了一下资料:
const引用与类型转换
给引用添加 const 限定后,不但可以将引用绑定到临时数据,还可以将引用绑定到类型相近的数据,这使得引用更加灵活和通用,它们背后的机制都是临时变量。
哦!一般情况下,类型不一样确实不可以直接引用。但是const限定后,这样的引用是合法的,因为QByteArray是QString类型相近的数据。
还有一种解释是“传参过程中实现了QString对象的创建”,这种说法是不对的,因为形参是一个引用!!