Ich sehe keinen logischen Grund. Ich meine, Sie können die Anforderung leicht überwinden, indem Sie eine Struktur verwenden, die ein Array-Element wie folgt enthält:
%Vor%Dies verhält sich genau so, als würde das Array direkt mit dem kleinen Unterschied zurückgegeben, dass Sie zuerst auf das Strukturelement 'd' zugreifen müssen, um es zu verwenden. Auch der Standard selbst hat ähnliche Funktionen vom Typ 'std :: array' hinzugefügt. Es scheint also, dass die Implementierung möglich ist. Warum hat ISO C ++ diese Aktion verboten? Vielleicht alte Code-Kompatibilität (aber ich kann kaum glauben, dass dies der Fall ist, da mit den anderen neuen Dingen ist es längst vorbei, wie zum Beispiel die neue Bedeutung des 'Auto' Schlüsselwortes).
Neben der Tatsache, dass der Standard dies nicht zulässt, und den historischen Gründen, die es erklären könnten, ist das Problem syntaktisch :
Stellen Sie sich vor, es wäre erlaubt: Wie würden Sie die Benennung des gesamten Arrays gegenüber der Array-Adresse gegenüber einem einzelnen Element unterscheiden:
%Vor%Wenn Sie die Bedeutung existierender Regeln ändern würden (z. B. dass Sie tätschen, dass a das gesamte Array wäre), hätten Sie große Probleme mit altem Code.
Die Antwort, wie ich sie sehe, ist zweifach:
Kompatibilität mit C. C funktioniert nicht so. Warum? Keine Ahnung. C war in verschiedenen Aspekten nie sehr logisch.
C ++ bevorzugt Bibliotheksfunktionen gegenüber Sprachfunktionen. Da C ++ 98 der erste Standard war und die Grundlagen hauptsächlich von C kopiert wurden (siehe Punkt 1), wurde dies in der ersten größeren Revision, C ++ 11, korrigiert, die den Bibliothekstyp std :: array einführt , als reines und einfaches Bibliotheksmerkmal, löst alle abscheulichen Macken, die C-artige Arrays mit sich bringen.
Zusammenfassend: Selbst wenn es sinnvoll wäre, eine korrekte Wertesemantik für Arrays zu haben, wird dies niemals passieren, da der offensichtliche Mangel gelöst werden kann, ohne die Sprache komplexer zu machen, als sie es bereits ist. Es ist extrem schwierig, Legacy- und Rückwärtskompatibilität zu beseitigen, daher ist die aktuelle Option von std :: array wirklich das, was Sie wollen. Benutze es. Es ist einfach. Du wirst es mögen. Eine Menge.