2014-12-18 20 views
10

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?

+4

Questa è una differenza estremamente sottile che direi. –

+2

Non c'è differenza. Potrebbe pensare che "auto" deduca invece una matrice, ma non lo farà. –

+3

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. –

risposta

7

Non sei completamente chiaro su ciò che Herb ha dichiarato (il contesto è importante), ma comunque i tipi sono gli stessi.

+4

Non ha detto altro (in quell'articolo) che la citazione fornita nella domanda.Sono abbastanza sicuro che tu abbia ragione, e non c'è differenza, sottile o altro. –

+1

Grazie a questo, e al commento di @remyabel sopra. Sono sicuro che hai ragione nel dire che non capivo esattamente quale fosse il suo punto di vista, ma anche dopo una serie di riletture non sono sicuro di cosa stesse dicendo. Che la versione automatica sia più manutenibile se c'è un sottile cambiamento nei tipi, forse. – user2862505

4

ho postato a Herb Sutter:

Cosa ne pensi è la “sottile differenza nel tipo di s, dove stile l'auto è più corretto”? Vedere C++11 type deduction vs const char *

Ed ecco la sua risposta:

Penso di aver avuto in mente che la versione automatica dedotta una matrice, che si non è così. Se avessi in mente qualcos'altro, l'ho dimenticato adesso, quindi ho rimosso quella frase e aggiunto il tuo moniker ai riconoscimenti . Grazie per il feedback!