• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Dlaczego const_cast przyjmuje w templa'cie tylko wskaźniki?

Object Storage Arubacloud
0 głosów
146 wizyt
pytanie zadane 30 maja 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam.

 

Mam teraz pewien problem, mianowicie:

for(int i=100; i>-0, !(strcmp(const_cast<const char>(_DrivesList[i]), ' ')); --i)
            std::cout<<"_DrivesList: "<<_DrivesList[i]<<"\n";

(póki co nie sprawdzałem czy to działa, ponieważ mam problem z tym rzutowaniem)

Dlaczego const_cast może przyjąć tylko (const) wksaźnik? Mogę uczynić _DrivesList const, ale już któryś raz uciekam od rozwiązania problemu z const_cast więc zadaje to pytanie. Nie wiem czy jest jakieś inne rozwiązanie... lambda również mi nic nie dała, choć pewnie coś źle napisałem:

for(int i=100; i>-0, !(strcmp([](char ch)->const char*{
            const char* retval = &ch;
            return retval;
        }(_DrivesList[i]), ' '); --i)
            std::cout<<"_DrivesList: "<<_DrivesList[i]<<"\n";

 

Tutaj błędy po przypadku z lambdą:

main.cpp: In function 'std::__cxx11::string GetMingwPathFromUser()':
main.cpp:55:31: error: invalid conversion from 'char' to 'const char*' [-fpermis
sive]
         }(_DrivesList[i]), ' '); --i)
                               ^
In file included from D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i68
6-w64-mingw32/include/guiddef.h:149:0,
                 from D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i68
6-w64-mingw32/include/winnt.h:635,
                 from D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i68
6-w64-mingw32/include/minwindef.h:163,
                 from D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i68
6-w64-mingw32/include/windef.h:8,
                 from D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i68
6-w64-mingw32/include/windows.h:69,
                 from main.cpp:1:
D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/i686-w64-mingw32/include/
string.h:63:15: note:   initializing argument 2 of 'int strcmp(const char*, cons
t char*)'
   int __cdecl strcmp(const char *_Str1,const char *_Str2);
               ^~~~~~

 

 

Z góry dziękuję za pomoc.

 

Pozdrawiam.

1 odpowiedź

+1 głos
odpowiedź 30 maja 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 30 maja 2018 przez Hiskiel
 
Najlepsza
strcmp porównuje zakończone zerem łańcuchy znaków, dlatego jej parametrami są dwa wskaźniki. A ty chcesz porównać pojedyncze znaki (przynajmniej tak to wygląda), więc może po prostu użyj ==

 

Nazwy zaczynające się od podkreślenia i wielkiej litery, takie jak _DrivesList, są zarezerwowane, nie nazywaj tak zmiennych, klas itp...
komentarz 30 maja 2018 przez Hiskiel Pasjonat (22,830 p.)
Nie są czasem zarezerwowane podwójnym podkreśleniem? Mam na myśli bibliotekę standardową.
komentarz 30 maja 2018 przez monika90 Pasjonat (22,940 p.)
Wszystkie nazwy które zawierają podwójne podkreślenie oraz te które zaczynają się od podkreślenia i wielkiej litery są zarezerwowane zawsze i wszędzie. Nazwy zaczynające się od pojedynczego podkreślenia są zarezerwowane w globalnej przestrzeni nazw. Użycie lub nie biblioteki standardowej nie ma na to wpływu.
komentarz 30 maja 2018 przez Hiskiel Pasjonat (22,830 p.)
Dziękuję bardzo.

Podobne pytania

0 głosów
1 odpowiedź 833 wizyt
pytanie zadane 26 marca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 2 lipca 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 309 wizyt
pytanie zadane 19 stycznia 2021 w C i C++ przez Mytwi Nowicjusz (160 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...