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

Argument passed by value appears as passed by reference in the debugger in Visual Studio 2010, C++

本文关键字:显示 引用 C++ Visual 参数 Studio 2010 按值传递 调试器      更新时间:2023-10-16

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

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

按值/引用传递是一个C++方面。在程序集级别,一个大结构可能仍会复制到某处并通过指针传递。它C++语义,您正在处理副本,但程序集不能按值传递各种结构。

相关文章: