linguistica - Tipo de argumento para la señal Qt y la ranura, ¿es importante la cuestión de los calificadores de referencia?
definicion de argumentacion linguistica (2)
Para señal y ranura de abajo tipo
signals:
void textChanged(const QString &);
public slots:
void setText(const QString & text)
el tipo de argumento de textChanged y setText parece funcionar invariable de const y & . ¿La diferencia constante y la calificación de referencia hacen alguna diferencia en comparación con solo usar QString?
QObject::connect(a,SIGNAL(textChanged(QString)),b,SLOT(setText(QString)));
QObject::connect(a,SIGNAL(textChanged(const QString &)),b,SLOT(setText(const QString &)));
EDITAR: No me di cuenta de que la ventana de salida muestra mensajes de error cuando se usa un tipo incompatible en SEÑAL o RANURA. Pensé que el mecanismo de ranura de señal es capaz de detectar el error de tipo de argumento en tiempo de compilación.
Descargo de responsabilidad: Mi qt es bastante oxidado, pero el mecanismo de señal / ranura sigue siendo solo llamadas de función C ++. Si el mecanismo de señal / ranura realmente copia los objetos en el almacenamiento interno, mis disculpas (necesitarás revisar las páginas de Qt, hay una grande en afaik de señales / ranuras), ya que los bits a continuación solo serán relevantes en un contexto de C ++. no en un contexto C ++ + Qt.
Si omite la referencia, se copiará la cadena (y tener la const no importará, los cambios que se realicen permanecerán en la función solo).
Si sale de la referencia pero saca la const, permite que el método modifique la cadena que le da. Ambos funcionan, pero hacen cosas diferentes al objeto que pasa (cantidad de copia / posibilidad de retener cambios).
Te sugiero que leas los siguientes recursos:
(en const correctness) https://isocpp.org/wiki/faq/const-correctness
(en referencias) https://isocpp.org/wiki/faq/references
para entender exactamente qué es pasar un parámetro y qué void foo(const A&)
/ void foo(const A)
/ void foo(A&)
/ void foo(A)
son todos diferentes.
Qt comprueba una firma normalizada , es decir
La normalización reduce el espacio en blanco a un mínimo, mueve ''const'' al frente donde sea apropiado, elimina ''const'' de los tipos de valores y reemplaza las referencias de const con valores.