GotW 94で、Herb Sutter は「クラシック C++」宣言を区別しています。
const char* s = "Hello";
そして「モダン」スタイル
auto s = "Hello";
s
彼は、 「auto
スタイルがより正確なのタイプには微妙な違いがある」と語っています。[追加編集: コメントは、これが Sutter が実際に意味したことを公正に表現していない可能性があることを示唆しています。以下の説明を参照してください。]
しかし...違いは何ですか?const char *
a が文字列リテラルを参照する正しい方法であるという印象を受けました。さらに、デバッガー (lldb) に問い合わせたところ、実際には型が同じであると思われるようです。
* 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"
Sutter が言及している微妙な違いはどこにあるのでしょうか?