Visual Studio erstellt beim Typecasting kein temporäres Objekt?

Ich verwende Visual Studio Express 2013 und spiele ein bisschen herum, um etwas über verschiedene Dinge in C ++ zu lernen.

Ich bin auf einen interessanten Fehler im Compiler gestoßen, bei dem kein temporäres Objekt erstellt zu werden scheint, wenn explizit Casting auf denselben Typ wie die Referenz eingegeben wird.

#include <iostream>

using namespace std;

int main()
{
    int number; // float number;
    number = 2;

    const int& plainref_i = number;
    const int& recastref_i = (int)number; // this goes wrong if number is int
    const float& plainref_f = number;
    const float& recastref_f = (float)number; // this goes wrong if number is float

    number = 3;

    std::cout << plainref_i << "\n";
    std::cout << recastref_i << "\n";
    std::cout << plainref_f << "\n";
    std::cout << recastref_f << "\n";

    return 0;
}

Dieser Befehl führt beim Kompilieren in VS zu folgender Ausgabe: 3 3 2 2

Aber mit gcc kompiliert, ergibt sich die folgende Ausgabe: 3 2 2 2

Wenn ich "int number" ersetze mit "float number" Ich bekomme in VS: 2 2 3 3

und mit gcc: 2 2 3 2

Ich frage mich, ob jemand dies als Fehler bestätigen kann und ob jemand eine mögliche Problemumgehung / Lösung kennt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage