std::string&
von einem temporären Typ std::string
std::string
nach std::string &
A nicht-const
Referenz darf nur an einen Lvalue &&
, stattdessen im Demo-Code, ich habe nur nicht-const lvalue Verweis! Kann mir jemand helfen, das Verhalten von VS2010 hier zu erklären? Ist es ein Fehler? Danke
Das ist ein bekanntes Problem / Merkmal der VS-Compiler. Sie haben das immer erlaubt und es scheint keinen Anstoß zu geben, diese Erweiterung zu entfernen .
Der Compiler gibt eine Fehlermeldung mit deaktivierten Spracherweiterungen und einer Warnung bei / W4 aus. Durch das Entfernen dieses Codes wird jedoch der Code für die vorherige Kompilierung aufgehoben, und Microsoft tut dies nur ungern. Deshalb werden sie auch ihre SFINAE-Unterstützung nicht reparieren.
Es gibt eine viel ärgerlichere Variante dieses Problems:
%Vor% Also: zu was zeigt b.f
während des Aufrufs von b.F()
? Das obige Beispiel, kompiliert mit VS2013 Standard-Debug-Einstellungen, läuft ohne abzustürzen und druckt 3
, aber ich würde vermuten, dass jedes viel komplexere Beispiel zu Stack-Korruption führen wird. Wenn dies nicht der Fall ist und der Compiler etwas "Cleveres" tut, um es zum Laufen zu bringen, dann denke ich, was es wirklich macht:
Tags und Links c++ visual-studio-2010 reference rvalue lvalue