Seltsame Syntax
-
Ich bin eben in dem Buch "Cpp Templates the complete Guide" folgendes Beispiel gesehen, was ich jedoch nicht verstehe (syntaktisch):
template<int I > void f(int (&)[24/(4-I)]);Sowas habe ich noch nie gesehen, was genau bewirkt dieser Ausdruck?
-
vereinfachen wir das mal:
template<int I > void f(int (&)[I]);diese funktion nimmt ein char array beliebiger größe an, also zb ein char[48]. der template parameter ist in diesem fall kein typ, sondern ein integer wert der die größe des arrays angibt.
nun der ausdruck:
24/(4-I)
gesucht wird also ein char-array auf den dieser ausdruck zutrifft.
zb ein char[24], weil 24/(4-3)=24, das I wär also 3.um es abzukürzen: folgende arraygrößen nimmt die funktion an:
1,2,3,4,6,8,12,24bei allen andren werten würde i ein bruch sein müssen.
-
Danke

-
@otze
Du irrst dich. I ist hier ein sogenannter "nondeduced context" was bedeuetet, dass I nicht automatisch hergeleitet wird sondern explizit angegeben werden muss.
-
HumeSikkins schrieb:
@otze
Du irrst dich. I ist hier ein sogenannter "nondeduced context" was bedeuetet, dass I nicht automatisch hergeleitet wird sondern explizit angegeben werden muss.k, wär auch zu schön gewesen :D.
-
otze schrieb:
HumeSikkins schrieb:
@otze
Du irrst dich. I ist hier ein sogenannter "nondeduced context" was bedeuetet, dass I nicht automatisch hergeleitet wird sondern explizit angegeben werden muss.k, wär auch zu schön gewesen :D.
Naja, dafür hast du die eigentliche Frage des OP ja beantwortet

-
Hi,
und was passiert wenn l == 4 ist ?
-
prolog schrieb:
Hi,
und was passiert wenn l == 4 ist ?
Dann gibts ne Division durch 0, war auch der Grund für das Beispiel.
-
Warum wird als Argument ein char-array verlangt ???
-
Redhead schrieb:
Warum wird als Argument ein char-array verlangt ???
War imho ein Schreibfehler von otze, ist ein int-Array.
MfG SideWinder