在Visual Studio 2010,C ++中,按值传递的参数在调试器中显示为按引用传递的参数

时间:2019-06-10 09:12:53

标签: c++ visual-studio-2010 debugging

我目前正在调试一个已经工作了一段时间的项目,而且,由于我想知道一个名为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)

问题消失,调试器和代码再次具有相同的签名。

1 个答案:

答案 0 :(得分:0)

按值/引用传递是C ++方面。在汇编级别,大型结构可能仍会复制到某处并通过指针传递。您正在处理重复项的C ++语义,但程序集无法按值传递各种结构。