Est référence null possible?

Est ce morceau de code valide (et de comportement défini)?

int &nullReference = *(int*)0;

G++ et clang++ compiler sans aucun avertissement, même lors de l'utilisation de -Wall, -Wextra, -std=c++98, -pedantic, -Weffc++...

Bien sûr, la référence n'est pas réellement nulle, car elle ne sera pas accessible (ça voudrait dire déréférencement d'un pointeur null), mais nous n'avons pu vérifier si elle est null ou non par la vérification de son adresse:

if( & nullReference == 0 ) //null reference
  • Pouvez-vous donner tous les cas où ce serait réellement utile? En d'autres termes, est-ce juste une question de théorie?
  • Eh bien, sont des références toujours indispensable? Les pointeurs peuvent toujours être utilisés à leur place. Une telle référence null permet d'utiliser une référence aussi quand vous pourriez n'ont pas d'objet de référence. Ne sais pas comment sale, il est, mais avant de penser à elle, j'ai été intéressé sur sa légalité.
  • Je pense que c'est désapprouvé
  • "nous avons pu vérifier" - non, vous ne pouvez pas. Il existe des compilateurs qui tourner la déclaration en if (false), l'élimination de la case, précisément parce que les références ne peut pas être nul, de toute façon. Mieux documentés version existe dans le noyau Linux, d'où une très similaires NULL chèque a été optimisé à: isc.sans.edu/diary.html?storyid=6820
  • "l'une des principales raisons de l'utilisation d'une référence au lieu d'un pointeur est de vous libérer du fardeau d'avoir à tester pour voir si elle fait référence à un objet valide" cette réponse, à Défaut de lien, ça a l'air bien bon!!!
  • oui c'est bien, mais certaines personnes vont faire de suicide si vous allez l'utiliser 🙂

InformationsquelleAutor peoro | 2010-12-06