Hallo Forum,
aufgrund anderer Beitraege hier moechte ich mich gerade mal etwas mehr
mit C++ und dem Keyword using beschaeftigen.
In diesem Beitrag:
Beitrag "Re: C++ Sinn von dieser Codeabschnitt"
wird z.B. folgendes Vorgeschlagen:
1
usingptr=int*;
Wenn ich das using erstmal weglasse, und folgenden Code habe:
1
int*a,b;
In diesem Beispiel ist nur a ein Pointer, aber nicht b.
Nutze ich aber using
1
usingptr=int*;
2
3
ptra,b;
So sind sowohl a als auch b Pointer.
using hat fuer mich damit einen echten Mehrwert. Aber was genau
passiert da? Es scheint ja doch mehr als nur ein Alias zu sein. Waere
es nur ein Alias, duerfte in dem using -Beispiel die Variable b kein
Pointer sein.
Mag mir wer von Euch erklaeren,
a) was da passiert und
b) wie genau das Funktioniert?
Ich wuerde es gerne verstehen.
Gruesse
Kaj G. schrieb:> Waere es nur ein Alias, duerfte in dem using -Beispiel die Variable b> kein Pointer sein.
Doch, sicher. Auch bei typedef konnte man einen Zeigertyp vereinbaren.
Was du meinst ist, wenn man nur eine Textersetzung durch den
Präprozessor hätte machen lassen.
1
#define PTR int*
2
3
PTRa,b;
Sollte man daher natürlich auch auf keinen Fall so schreiben. Daher
ist es in C ja auch sehr viel üblicher, dass man den Stern an den
Namen klebt, zu dem er gehört, also:
"using" steht In C++ Doku unter dem Begriff "type alias". Also ein
anderer (kürzerer) Name für einen Typ. Klingt nach typedef, nur kann
using auch Template Types benennen, z.B.:
1
template<size_tN>
2
usingchar_array_t=std::array<char,N>;
3
4
char_array_t<10>char10;
5
char_array_t<20>char20;
using ist somit eine Art generalisiertes typedef.
BTW, Fragen zu C++ kann man hier (risikoarm) vorklären:
http://en.cppreference.com/
Jörg W. schrieb:> Doch, sicher. Auch bei typedef konnte man einen Zeigertyp vereinbaren.
Und so sieht das aus:
1
typedefint*ptr;
Hat exakt den gleichen Effekt wie
1
usingptr=int*;
d.h. bei
1
ptra,b;
sind auf jeden Fall a und b beide Zeiger. Was ich im Original-Thread
sagen wollte, ist dass ich die "using" Variante intuitiver finde.
Bei
1
int*a,b;
Ist nur a ein Zeiger, weil das * hier zum Variablennamen (a) gehört,
und nicht zum Typ, welcher für beide Variablen gilt. Wenn aber der Typ
bereits ein Zeiger ist (wie ptr), sind danach beides Zeiger.
Die C-Syntax ist zwar weder schön noch intuitiv, aber unlogisch ist sie
nicht ;-)
Sheeva P. schrieb:> Carl D. schrieb:>> "using" steht In C++ Doku unter dem Begriff "type alias".>> Ja, "using" kann auch das, aber noch ein bisschen mehr:
Es ging aber nicht um jede Verwendung des Keywords "using", sondern im
konkreten Fall um "type alias".
Niklas G. schrieb:> Was ich im Original-Thread> sagen wollte
Darum ging es mir gar nicht. :-)
Aber das war der Stein des Anstosses fuer mich, mich mal etwas naeher
mit den Vorzuegen von C++ zu beschaeftigen.
Ich werde mal noch etwas damit herum spielen.
Carl D. schrieb:> Es ging aber nicht um jede Verwendung des Keywords "using", sondern im> konkreten Fall um "type alias"
Na, jetzt fangt hier bitte nicht an zu streiten. Diese Verwendung war
der Anfang, aber wenn es auch andere, gute Verwendungen fuer using
gibt, dann darf das hier gerne mit angetragen werden. :-)
Schon mal vielen Dank fuer Eure Antworten. :o)
Gruesse
Kaj G. schrieb:>> Carl D. schrieb:>> Es ging aber nicht um jede Verwendung des Keywords "using", sondern im>> konkreten Fall um "type alias"> Na, jetzt fangt hier bitte nicht an zu streiten. Diese Verwendung war> der Anfang, aber wenn es auch andere, gute Verwendungen fuer using> gibt, dann darf das hier gerne mit angetragen werden. :-)
Streit ist was ganz anderes, wenn es hier um den dritten Buchstaben und
den doppelten Grundrechenoperator geht. ;-)
Wenn du mehr dazu erfahren willst, kann ich dir nur wärmstens den
angegebenen Link empfehlen. Ist zwar etwas trocken, aber immer mit
Beispielen, die zu Onlinecompilern verlinkt sind. Da kann man gleich
testen.