|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
[C++] Typo template come parametro di una funzione con argomento array
Salve, ho trovato in giro questa classe molto interessante ma non capisco la dichiarazione del costruttore:
Codice:
class str_const { // constexpr string
private:
const char* const p_;
const std::size_t sz_;
public:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) : // ctor
p_(a), sz_(N - 1) {
}
constexpr char operator[](std::size_t n) { // []
return n < sz_ ? p_[n] : throw std::out_of_range("");
}
constexpr std::size_t size() {
return sz_;
} // size()
};
Quello che volevo sapere è il significato di: Codice:
template<std::size_t N>
constexpr str_const(const char (&a)[N]) {}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 13050
|
In soldoni in C una stringa è un'array di char... MA c'è un ma...
Codice:
void main(void)
{
char stringa1[] = "pippo";
char* stringa2 = "pippo";
printf("Length: %u\n", sizeof(stringa1)); // stampa 6 (la lunghezza di pippo + terminatore)
printf("Length: %u\n", sizeof(stringa1)); // stampa 4 o 8 (la dimensione di un ptr a 32 o 64 bit)
return 0;
}
Dimensione che il compilatore usa come parametro implicito per costruire una funzione "concreta" a partire dal template. (In pratica puoi omettere la variabile template quando chiami il costruttore perché viene "inferita" dal parametro) C'è da dire che è la prima volta che vedo: Codice:
... funzione( tipo (&a)[N] ) C/C++ riescono sempre a sorprendere Ultima modifica di WarDuck : 06-11-2014 alle 16:42. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 211
|
Sizeof di un array, avevo scoperto anche io che funzionava correttamente quando studiavo il C. Il C però non gestisce la dimensione dell'array (così mi hanno insegnato), per cui devo salvarla da qualche parte come costante. Ciò che volevo sapere é se posso usare questo trick. Se é una caratteristica standard del C/C++ o se dipende dal compilatore che uso.
Ho letto che l'argomento é una reference ad un array di char di dimensione N. Credo che in C++ si possa specificare la dimensione dell'array a cui si fa riferimento e quindi si commette un errore se si lega la variabile refetence ad un array di dimensione diversa. Non l'ho ancora verificato però. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:19.



















