Qt - Это передача по ссылке? - PullRequest
3 голосов
/ 08 июня 2011

Если мы напишем следующее в Qt в качестве аргумента функции: QString &tableName

Значит ли это, что мы передаем по ссылке?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 08 июня 2011

Строго говоря, это функция параметр , а не функция аргумент . Параметр - это переменная, объявленная в списке параметров функции; аргумент - это значение, переданное функции вызывающей функцией. Поэтому параметр QString &tableName передается по ссылке. Но в качестве аргумента функции &tableName будет означать «адрес tableName».

Обновлено: По запросу приведен пример кода для уточнения различия:

void f (double y) ;
f (99.0) ;

double y - объявление параметра; это напоминает объявление переменной. y - это параметр функции.

99.0 - аргумент функции; это выражение, которое должно быть преобразовано в тип double.

5 голосов
/ 08 июня 2011

Да, это передача по ссылке в C ++.Вы также можете написать QString const & tableName, если не хотите иметь возможность случайно изменить tableName.

4 голосов
/ 08 июня 2011

Да.Совет: сделайте это const, если вы не хотите, чтобы это изменилось.

2 голосов
/ 08 июня 2011

Обратите внимание, что, как и большинство нетривиальных базовых типов Qt, QString является облегченным контейнерным объектом, который реализует семантику "копировать при записи". Таким образом, единственная причина для передачи одного по ссылке - если ваша функция хочет изменить копию вызывающей стороны, и нет никакой причины передавать один по константной ссылке (если вы не очень много знаете о Qt).

...