O padrão C ++ 11 (ISO / IEC 14882: 2011) diz § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Para o C ++, não há problema em apontar para um String Literal, pois qualquer tentativa de modificá-lo leva a uma falha. Mas por que isso é válido em C?
O C ++ 11 diz também:
char* p = (char*)"abc"; // OK: cast added
O que significa que, se um elenco for adicionado à primeira instrução, ele se tornará válido.
Por que o elenco torna a segunda instrução válida em C ++ e como ela é diferente da primeira? Ainda não é prejudicial? Se for o caso, por que o padrão disse que está tudo bem?
OK
.
const
, portanto não eram necessariamente const
.
char[]
em primeiro lugar. O segundo é umconst_cast
disfarçado.