Forum: Compiler & IDEs C++: Was genau macht 'using'?


von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

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
using ptr = 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
using ptr = int*;
2
3
ptr a, 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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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
PTR a, 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:
1
int *a, b;

von Carl D. (jcw2)


Lesenswert?

"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_t N>
2
using char_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/

von Sheeva P. (sheevaplug)


Lesenswert?

Carl D. schrieb:
> "using" steht In C++ Doku unter dem Begriff "type alias".

Ja, "using" kann auch das, aber noch ein bisschen mehr:

http://en.cppreference.com/w/cpp/keyword/using

> BTW, Fragen zu C++ kann man hier (risikoarm) vorklären:
> http://en.cppreference.com/

;-)

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Doch, sicher.  Auch bei typedef konnte man einen Zeigertyp vereinbaren.

Und so sieht das aus:
1
typedef int *ptr;
Hat exakt den gleichen Effekt wie
1
using ptr = int*;
d.h. bei
1
ptr a, 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 ;-)

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

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".

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

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

von Carl D. (jcw2)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.