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?
Das ist ein sehr subtiler Unterschied, würde ich sagen. –
Es gibt keinen Unterschied. Er könnte denken, dass "auto" stattdessen ein Array ableiten würde, aber das wird nicht funktionieren. –
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. –