Maison >développement back-end >C++ >Pourquoi Visual Studio autorise-t-il la liaison des références non-Const à des objets temporaires ?

Pourquoi Visual Studio autorise-t-il la liaison des références non-Const à des objets temporaires ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 15:26:10282parcourir

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects?

Bogue de Visual Studio : référence non-const liée à un objet temporaire

L'extrait de code donné illustre un comportement particulier observé dans Visual Studio :

class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo());
}

Visual Studio permet à ce code de se compiler sans erreurs, tandis que gcc génère une erreur de compilation. Ce comportement devient encore plus déroutant lorsqu'un typedef est utilisé pour représenter Zebra comme int, car Visual Studio détecte alors le problème.

Ce comportement est piloté par une ancienne extension Visual Studio. Comme indiqué dans le rapport de bogue de Microsoft, « Les objets temporaires peuvent être liés à des références non const », Visual Studio permet aux références non const d'être liées à des objets temporaires.

Cependant, cette extension peut être désactivée à l'aide du / Indicateur du compilateur Za, qui fera de l'extrait de code en question une erreur. De plus, un avertissement de niveau 4 (activé avec /W4) est disponible pour signaler ce problème.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn