type qualifiers ignored on function return types

type qualifiers ignored on function return types

by Julius Emile Girardin -
Number of replies: 4

Bonjour,

dans le cours sur la surchage d'opérateur, il a été conseillé de déclarer certain opérateurs avec un type de retour const pour de pas permettre de choses du genre  ++(a+b); ou (a==b)=true;  où a et b sont des types quelconques. Pourtant, sur QTCreator, mon compilateur m'avertit: "warning: type qualifiers ignored on function return type [-Wignored-qualifiers]" pour plusieurs opérateurs, par exemple pour  "const bool operator!=(Vecteur v1,Vecteur v2); " que l'on nous a demandé de coder dans l'exercice P4.

Est-ce que la meilleure solution est d'enlever le const ou d'ignorer/faire disparaitre ces warnings? Parce que dans tout les cas, si je ne me trompe pas, le compilateur n'accepte pas des expressions comme décrites plus haut.

Merci pour votre aide

In reply to Julius Emile Girardin

Re: type qualifiers ignored on function return types

by Josué Antoine Maechling -

Je pense que ce lien devrait répondre à tes questions de manière plus claire.

Quand à l'email que tu m'as envoyé ça ne pose pas de problème d'en parler ici. Pour les autres : il souhaitait savoir si on pouvait mettre les méthodes dessine en "const" car elles ne modifient pas les objets (attention pas le const au début mais à la fin bien sûr). Il souhaitait aussi faire ça pour éviter des ."passing xxx as this argument discards qualifiers".

Alors je te rassure il ne faut pas s'inquiéter pour ça ce n'est pas grave de toute manière (c'est bien quand même de s'y intéresser).

En effet on peut tout à fait penser qu'il faudrait rajouter un const et à première vue je ne serais pas contre. Mais de toute manière il a demandé de ne pas y toucher donc n'y touchez pas.

Je pensais que ça pourrait avoir un rapport avec le double dispatch (aucune autre raison ne serait valable). Malgré quelques recherches supplémentaires je ne trouve pas d'exemple concret en rapport avec const, mais de toute manière je pense que ça n'a rien à voir et qu'on pourrait tout à fait mettre const si on veut (je ne dis normalement pas de bêtises, en tout cas ça n'a visiblement aucun rapport avec la définition du double dispatch).

In reply to Josué Antoine Maechling

Re: type qualifiers ignored on function return types

by Julius Emile Girardin -
Mais c'est bien une erreur le "passing xxx as this argument discards qualifiers", pas un warning, du coup ça empêche d'appeler ces méthodes sur des références constantes par exemple, or enlever le const dans la référence n'est pas un bon moyen de régler ce problème, car on pourrait par maladresse modifier la valeur de l'argument, ce qui n'est pas désirable.
In reply to Julius Emile Girardin

Re: type qualifiers ignored on function return types

by Fares Ahmed -

Ah, vous avez donc un objet const sur lequel vous essayez d'appeler une méthode non-const, dans ce cas là pas le choix de toute manière il vous faut déclarer la méthode dessine() comme const.

La remarque dans les énoncés portaient surtout sur le fait que ça doit être une méthode void virtuelle avec le nom dessine. Le fait que la méthode soit const ou non n'a pas d'influence sur le double-dispatch, vous pouvez donc la rendre const sans problème.

In reply to Fares Ahmed

Re: type qualifiers ignored on function return types

by Jean-Cédric Chappelier -

je confirme que vous pouvez la mettre const si elle l'est pour vous.
je ne l'ai pas imposée a priori comme const au départ car le dessin lui-même pourrait devoir modifier un état interne d'un dessinable dans le cas le plus général. Si ce n'est jamais le cas pour vous, pas de pb à la mettre const.