2014-12-18 20 views
10

W GotW 94, Herb Sutter rozróżnienie pomiędzy "klasycznym C++" deklaracjiC++ 11 rodzaj odliczenie vs const char *

const char* s = "Hello"; 

i "nowoczesnego" stylu

auto s = "Hello"; 

mówi nas, że istnieje "subtelna różnica w rodzaju s, gdzie styl auto jest bardziej poprawny". [Edytowane w celu dodania: komentarze sugerują, że może to nie być uczciwą reprezentacją tego, co Sutter rzeczywiście miał na myśli; zobacz dyskusję poniżej.]

Ale ... co za różnica? Miałem wrażenie, że const char * jest prawidłowym sposobem odnoszenia się do literału ciągłego. Ponadto, gdy poprosiłem mojego debugger (lldb), wydaje się myśleć typy są rzeczywiście takie same:

* 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" 

Gdzie jest subtelna różnica Sutter dotyczy?

+4

To bardzo subtelna różnica, którą mógłbym powiedzieć. –

+2

Nie ma różnicy. Mógłby pomyśleć, że 'auto' zamiast tego wyprowadzi tablicę, ale nie będzie. –

+3

Sutter faktycznie stwierdza "na przykład, czy możesz dostrzec subtelną różnicę w typie s, gdzie styl automatyczny jest bardziej poprawny?" Twoja parafraza nadaje zupełnie inne znaczenie temu stwierdzeniu. –

Odpowiedz

7

Nie do końca wiadomo, co powiedział Herb (kontekst jest ważny), ale w każdym razie typy są takie same.

+4

Nie powiedział nic więcej (w tym artykule) niż cytat podany w pytaniu.Jestem prawie pewna, że ​​masz rację, i nie ma różnicy, subtelnej lub innej. –

+1

Dzięki temu oraz komentarzowi do @remyabel powyżej. Jestem pewien, że masz rację, że nie zrozumiałem dokładnie, o co mu chodziło, ale nawet po kilku ponownych lekturach nie jestem pewien, co on właściwie mówi. To, że auto wersja jest łatwiejsza do utrzymania, jeśli istnieje subtelna zmiana typów. – user2862505

4

Zamieściłem to Herb Sutter:

Co myślisz jest „subtelna różnica w typie S, gdzie auto styl jest bardziej poprawne”? Zobacz C++11 type deduction vs const char *

a oto jego odpowiedź:

myślę, że miał na myśli, że wersja auto wywnioskować tablicę, która to nie. Gdybym miał coś jeszcze na myśli, zapomniałem już o tym, więc Usunąłem tę frazę i dodałem twój moniker do Potwierdzeń. Dzięki za opinie!