Тип аргумента для спокойного сигнала и слота, действительно ли константа ссылается на вопросы спецификаторов?

Для сигнала и слота ниже типа

signals:
    void textChanged(const QString &);

public slots:
    void setText(const QString & text)

тип аргумента textChanged и setText, кажется, работает invarable из константы и и. Постоянная и ссылочная квалификация имеют какое-либо значение по сравнению только с использованием QString?

QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString)));
QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &)));

Править: Я не заметил окна вывода, показывающего сообщения об ошибках, когда существует несовместимый тип, используемый в СИГНАЛЕ или СЛОТЕ. Я думал, что механизм слота сигнала способен к обнаружению ошибки типа аргумента во время компиляции.

21
задан yesraaj 23 December 2009 в 20:26
поделиться

2 ответа

Qt проверяет нормализованную подпись, что означает

Нормализация уменьшает количество пробела до Минимум, перемещает "консте" на фронт где уместно, удаляет "const из типов значений и заменяет const ссылки со значениями.

26
ответ дан 29 November 2019 в 21:24
поделиться

Отказ от ответственности: мой qt довольно ржавый, но механизм сигнала / слота по-прежнему представляет собой просто вызовы функций C ++. Если механизм сигнала / слота действительно копирует объекты во внутреннее хранилище, приношу свои извинения (вам нужно проверить страницы Qt, есть большой по сигналам / слотам afaik) - поскольку приведенные ниже биты будут актуальны только в контексте C ++, не в контексте C ++ + Qt.

Если вы не укажете ссылку, строка будет скопирована (и наличие константы не имеет значения, любые внесенные в нее изменения останутся только в функции).
Если вы оставите ссылку, но уберете константу, вы позволите методу изменять строку, которую вы ему даете. Они оба работают, но делают разные вещи с переданным вами объектом (количество копий / возможность сохранения изменений).

Я предлагаю вам прочитать следующие ресурсы:

(о корректности констант) https: // isocpp.org/wiki/faq/const-correctness

( по ссылкам) https://isocpp.org/wiki/faq/references

, чтобы точно понять, что такое передача параметра и как void foo (const A &) / void foo (const A) / void foo (A &) / void foo (A) все разные.

4
ответ дан 29 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: