2014-12-18 19 views
10

In GotW 94 zieht Herb Sutter eine Unterscheidung zwischen dem "klassischen C++" DeklarationC++ 11-Typ Abzug vs const char *

const char* s = "Hello"; 

und dem "modernen" Stil

auto s = "Hello"; 

Er erzählt uns, dass es einen "feinen Unterschied in der Art von s gibt, wo der auto Stil korrekter ist". [Bearbeitet, um hinzuzufügen: Kommentare deuten darauf hin, dass dies keine angemessene Darstellung dessen ist, was Sutter tatsächlich meinte; Siehe Diskussion unten.]

Aber ... was ist der Unterschied? Ich hatte den Eindruck, dass ein const char * der richtige Weg ist, auf ein String-Literal zu verweisen. Ferner kann, wenn ich meine Debugger (LLDB) gefragt, so scheint es die Typen tatsächlich gleich sind zu denken:

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

Wo ist der feine Unterschied zu Sutter bezieht?

+4

Das ist ein sehr subtiler Unterschied, würde ich sagen. –

+2

Es gibt keinen Unterschied. Er könnte denken, dass "auto" stattdessen ein Array ableiten würde, aber das wird nicht funktionieren. –

+3

Sutter sagt tatsächlich zum Beispiel, können Sie einen feinen Unterschied in der Art von s erkennen, wo der automatische Stil korrekter ist? Ihre Umschreibung gibt der Aussage eine völlig andere Bedeutung. –

Antwort

7

Sie sind nicht ganz klar, was Herb sagte (Kontext ist wichtig), aber trotzdem sind die Typen gleich.

+4

Er hat nicht mehr (in diesem Artikel) als das Zitat in der Frage gesagt.Ich bin mir ziemlich sicher, dass Sie Recht haben, und es gibt keinen Unterschied, subtil oder anders. –

+1

Danke, und zu dem Kommentar von @remyabel oben. Ich bin sicher, du hast Recht, dass ich nicht genau verstanden habe, was sein Argument ist, aber selbst nach mehreren Wiederholungen bin ich mir nicht sicher, was er eigentlich sagt. Die Auto-Version ist möglicherweise wartungsfreundlicher, wenn es eine subtile Änderung an den Typen gibt. – user2862505

4

ich gepostet zu Herb Sutter:

Was denken Sie ist der „feinen Unterschied in der Art des s, wo die Auto-Stil mehr korrekt ist“? C++11 type deduction vs const char *

Siehe Und hier ist seine Antwort:

Ich glaube, ich im Sinn hatte, dass die Auto-Version eine Reihe abgeleitet, die es nicht. Wenn ich etwas anderes im Sinn hatte, habe ich es jetzt vergessen, also Ich habe diesen Ausdruck entfernt und Ihren Moniker zu den Danksagungen hinzugefügt. Danke für die Rückmeldung!