Mam poniżej funkcji (tylko do odtwarzania problemu):Szablon „char *”
template <typename KeyT>
void func(const KeyT cptr) {
std::cout << typeid(KeyT).name() << std::endl;
}
chciałbym nazwać sznurkiem dosłowne, jak poniżej:
func<char*>("literal");
Ale ja w końcu się poniżej ostrzeżenia:
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wc++11-compat-deprecated-writable-strings]
mam konkretną potrzebę korzystania char*
jak mój klucz typu i jestem ex pecting TAD
, aby rozważyć param type
jako całość, ponieważ nie biorę go przez odniesienie.
Ostrzeżenie dotyczy zarówno kompilatorów clang
, jak i g++
.
W jaki sposób wyprowadza się tutaj param type
?
Z góry dziękuję.
'cptr' kończy się być wskaźnikiem const-to-char (' char * const'), a nie wskaźnikiem na const char. – melpomene
@melpomene Jak to się tak skończyło? – Arunmu
Twoja deklaracja mówi, że 'cptr' musi być' const', i tworzysz 'KeyT' z' char * '. Więc 'cptr' jest const KeyT (z KeyT = wskaźnik do char). – melpomene