我目前正在调试一个已经工作了一段时间的项目,而且,由于我想知道一个名为file的QString的内容,并因此在监视的变量中写入了file.d,所以我注意到了文件实际上是一个地址。
问题是,文件不是我代码中的地址。
这是我当时使用的功能:
void MyClass::updateFile(QString file, QTreeWidgetItem *item)
{
if(file.isEmpty())
return;
QFile f(file); // Line were I had the breakpoint
...
}
所以我检查了堆栈,它是真正写的
updateFile(QString *file, QTreeWidgetItem *item)
我首先想到了编译器优化,但是由于我处于调试模式,因此这似乎不太可能。
您有解释吗?
编辑:将签名更改为
时,我必须添加它void MyClass::updateFile(QString const &file, QTreeWidgetItem *item)
问题消失,调试器和代码再次具有相同的签名。
答案 0 :(得分:0)
按值/引用传递是C ++方面。在汇编级别,大型结构可能仍会复制到某处并通过指针传递。您正在处理重复项的C ++语义,但程序集无法按值传递各种结构。