In GotW 94, Herb Sutter opera una distinzione tra il "classico C++" dichiarazioneC++ 11 Tipo di deduzione vs const char *
const char* s = "Hello";
e lo stile "moderno"
auto s = "Hello";
Egli dice noi che c'è una "sottile differenza nel tipo di s
, dove lo stile auto
è più corretto". [Modificato per aggiungere: i commenti suggeriscono che questa potrebbe non essere una rappresentazione corretta di ciò che Sutter intendeva realmente; vedere la discussione di seguito.]
Ma ... qual è la differenza? Ho avuto l'impressione che il const char *
sia il modo corretto per fare riferimento a una stringa letterale. Inoltre, quando ho chiesto al mio debugger (lldb), sembra pensare che i tipi sono in realtà la stessa:
* thread #1: tid = 0x1756c2, 0x0000000100000f8f test`main + 31 at test.cc:4, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000f8f test`main + 31 at test.cc:4
1 int main(void) {
2 const char* s = "Hello";
3 auto t = "Hello";
-> 4 return 0;
5 }
(lldb) fr v
(const char *) s = 0x0000000100000f91 "Hello"
(const char *) t = 0x0000000100000f91 "Hello"
Dov'è la sottile differenza Sutter si riferisce a?
Questa è una differenza estremamente sottile che direi. –
Non c'è differenza. Potrebbe pensare che "auto" deduca invece una matrice, ma non lo farà. –
Sutter afferma effettivamente "ad esempio, puoi individuare una sottile differenza nel tipo di s, in cui lo stile automatico è più corretto?" La tua parafrasi dà un significato completamente diverso alla frase. –