Verwendung von decltype
-
Hallo,
ich wollte eigentlich folgendes schreiben:
auto anz = anzRecords(), count = 0;da merkert aber mein Visual Studio 2010, dass count den Typ int erhalten soll.
Ich will erreichen das die Variable count denselben Typ erhält wie anz.
Mir ist jetzt folgende Lösung eingefallen.
auto anz = anzRecords(); decltype(anz) records = 0;ist das so ok und üblich?
Gruss Uwe
-
Es ist gültiger Code und macht das was du möchtest. Ob es üblich ist weiß ich nicht.
-
Vielleicht willste
declytype(anzRecords()) anz = anzRecords(), count = 0;Keine Ahnung, das Problem hatte ich noch nicht.
-
uwe00 schrieb:
da merkert aber mein Visual Studio 2010, dass count den Typ int erhalten soll.
AFAIK müssen die Typen konsistent deduziert werden. Also, entweder kommt bei beiden int (oder sonstwas) raus, oder du musst das anders aufschreiben.
uwe00 schrieb:
auto anz = anzRecords(); decltype(anz) records = 0;So kann man das machen, ja.
-
[code="java"]
AFAIK müssen die Typen konsistent deduziert werden.
Nö. Da sind unterschiedliche Prinzipien am Werk. Mal ein gekünsteltes Beispiel:
[code="cpp"]#include <type_traits>int&& foo(){ return {}; } // Nur für Testzwecke
int main()
{
auto i = foo;
decltype(foo) i2 /* = foo */;static_assert( std::is_same<decltype(i), int&&(*)()>::value, "" );
static_assert( std::is_same<decltype(i2), int&&()>::value, "" );
}[/code]da merkert aber mein Visual Studio 2010, dass count den Typ int erhalten soll.
Ja, weil der
autoTyp-spezifizierer eben keine unterschiedlichen Typen deduzieren darf.§ 7.1.6.4/8 schrieb:
The type of each declared variable is determined as described above, and if the type that replaces the placeholder type is not the same in each deduction, the program is ill-formed.
ist das so ok und üblich?
Ok und üblich ist es, in diesem Fall (für 0) einfach den Typ auszuschreiben.
DerTyp anz = anzRecords(), count = 0;Edit: Volkards Variante ist natürlich genauso möglich, ich finde aber, dass sie hier nicht schöner ist als das Ausschreiben des Typs.
-
volkard schrieb:
Vielleicht willste
declytype(anzRecords()) anz = anzRecords(), count = 0;Keine Ahnung, das Problem hatte ich noch nicht.
Danke, ich habe kein Problem mit zwei Zeilen Code, so sah es nur so ungewohnt aus.
Gruss Uwe