Ist const ein eigener Typ oder ein Qualifier?
Von: Andreas Huennebeck (acmh@gmx.de) [Profil]
Datum: 19.03.2009 16:40
Message-ID: <72f7avFp850hU1@mid.individual.net>
Newsgroup: de.comp.lang.iso-c++
Datum: 19.03.2009 16:40
Message-ID: <72f7avFp850hU1@mid.individual.net>
Newsgroup: de.comp.lang.iso-c++
Hallo,
hier ist beim Einsatz von template Funktionen eine Frage aufgekommen:
Ist 'const T' ein völlig anderer Typ als 'T' oder sind die Typen gleich und
const ist nur ein Qualifier?
Der Beispielcode möge das verdeutlichen, die Fehlermeldungen des
Compilers habe ich in die angemeckerten Zeilen getan:
--------------- snip ----------------------------- snip ----------------------
template <typename T> bool compare_1 ( T* p1, T* p2 ) { return true ; }
template <typename T> bool compare_2 ( const T* p1, const T* p2 ) { return true ; }
template <typename T> bool compare_3 ( T& p1, T& p2 ) { return true ; }
template <typename T> bool compare_4 ( const T& p1, const T& p2 ) { return
true ; }
int test_compare()
{
const char cs [] = "Hallo 1" ;
char s [] = "Hallo 2" ;
compare_1( s, s);
compare_1( s, cs); // error: no matching function for call to ?compare_1(char [8], const
char [8])?
compare_1(cs, s); // error: no matching function for call to ?compare_1(const char [8],
char [8])?
compare_1(cs, cs);
compare_2( s, s);
compare_2( s, cs);
compare_2(cs, s);
compare_2(cs, cs);
compare_3( s, s);
compare_3( s, cs); // error: no matching function for call to ?compare_3(char [8], const
char [8])?
compare_3(cs, s); // error: no matching function for call to ?compare_3(const char [8],
char [8])?
compare_3(cs, cs);
compare_4( s, s);
compare_4( s, cs);
compare_4(cs, s);
compare_4(cs, cs);
}
--------------- snip ----------------------------- snip ----------------------
Da compare_1(cs,cs) und compare_3(cs,cs) akzeptiert werden, spricht
das dafür, dass 'const T' ein eigener Typ ist. Wäre const ein Qualifier,
dann dürfte der Compiler das nicht akzeptieren.
Da aber compare_2() und compare_4() mit allen Mischvarianten
akzeptiert werden, spricht dafür, dass const nur ein Qualifier ist,
weil beide Funktionsparameter den gleichen Typ haben.
Kann jemand die Diskrepanz aufklären?
Danke und Tschüss
Andreas
--
Andreas Hünnebeck | email: acmh@gmx.de
----- privat ---- | www : http://www.huennebeck-online.de
Fax/Anrufbeantworter: 0721/151-284301
GPG-Key: http://www.huennebeck-online.de/public_keys/andreas.asc
PGP-Key: http://www.huennebeck-online.de/public_keys/pgp_andreas.asc
[ Auf dieses Posting antworten ]Antworten
- James (21.03.2009 14:37)
- Markus Schaaf (21.03.2009 10:36)
- Andreas =??B?SMO8bm5lYmVjaw==?= (23.03.2009 10:43)
- Heiko Bauke (20.03.2009 18:29)
- Sebastian Waschik (21.03.2009 12:11)
- Thorsten Nitz (22.03.2009 11:08)
- Andreas =??B?SMO8bm5lYmVjaw==?= (24.03.2009 19:20)
