Аргумент, переданный по значению, выглядит как переданный по ссылке в отладчике в Visual Studio 2010, C ++ - PullRequest
0 голосов
/ 10 июня 2019

В настоящее время я отлаживаю проект, над которым я работал некоторое время, и, поскольку я хотел узнать содержимое именованного файла 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 голосов
/ 10 июня 2019

Передача по значению / ссылке является аспектом C ++.На уровне сборки большая структура все еще может быть скопирована куда-то и передана указателем.Это семантика C ++, с которой вы работаете над дубликатом, но сборка не может передать по значению всевозможные структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...