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.