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

标签 c++ visual-studio-2010 debugging

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

我首先想到了编译器优化,但由于我处于 Debug模式,这似乎不太可能。

你有解释吗?

编辑:我必须在将签名更改为

时添加
void MyClass::updateFile(QString const &file, QTreeWidgetItem *item)

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

最佳答案

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

关于c++ - 按值传递的参数在 Visual Studio 2010、C++ 的调试器中显示为按引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56523489/

相关文章:

c++ - VC++ 调试器 - 评估虚函数,CXX0052 : Error: member function not present

visual-studio-2010 - 新创建的TFS 2010迭代不可见

c# - 执行时自动插入ID

node.js - 将Clojurescript Repl连接到正在运行的 Node 进程的方法

java - 在 Eclipse GWT 中调试

c++ - OpenGL 旋转 - 本地轴与全局轴

c++ - 如何使用 Clang 更喜欢一个图书馆位置而不是另一个图书馆位置?

debugging - Delve (dlv) 无法附加到进程

c++ - 模板化类的方法是否隐含内联链接?

.net - 在 F# 中使用 System.Collections Queue 类时出现类型参数错误