stigmt
@stigmt
Учусь

Почему константное значение Qstring?

Новичек. Пытаюсь разораться в чужом коде
конкретно в этом куске:
public:
    Get(const QString &peer, const QString &objectId, QObject *parent = 0);


и не пойму почему в прототипе метода Get указанны константные параметры строк. Есть мысли?
#pragma once

#include <QObject>
#include <QStringList>

class QUdpSocket;
class Get : public QObject
{
    Q_OBJECT

    QString peer;
    QString objectId;

    QUdpSocket *socket;

    QStringList response;
public:
    Get(const QString &peer, const QString &objectId, QObject *parent = 0);

    void execute();

    QStringList getResponse() const;

private Q_SLOTS:
    void readPendingDatagram();
};
  • Вопрос задан
  • 558 просмотров
Решения вопроса 2
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Есть такое правило: "const по умолчанию", т.е. const нужно использовать везде, где это возможно. В данном случае QString передается по ссылке и планируется только для чтения, потому его делают константным.

Кроме того, для копируемых объектов const не нужно, достаточно передавать их по значению (аргумент скопируется и нам будет доступна лишь его копия). Но QString может быть достаточно крупным, а вызовы метода - достаточно частыми, потому передается просто ссылка. Появляется возможность изменить объект через эту ссылку. Чтобы это снова запретить, в методе указывают const для аргумента-ссылки.
Ответ написан
Комментировать
Adamos
@Adamos
Передавая в функцию const QString &peer, вы:
1. не тратитесь на копирование ее содержимого
2. имеете к ней такой же доступ, как к локальной переменной
3. но не можете изменить

Обычно ради 1 и 3, собственно, const-ссылки и используются. Особенно если объект еще сложнее, и его копирование невозможно или нежелательно в принципе.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы