在GotW 94中,Herb Sutter区分了“经典C ++”声明
const char* s = "Hello";
和“现代”风格
auto s = "Hello";
他告诉我们,s
的类型存在“细微差别,auto
风格更正确”。 [编辑补充:评论表明,这可能不是Sutter实际意义的公平表示;见下面的讨论。]
但是......有什么区别?我的印象是const char *
是引用字符串文字的正确方法。此外,当我问我的调试器(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所指的微妙差异在哪里?
答案 0 :(得分:7)
你并不完全清楚赫伯所说的(背景很重要),但无论如何都是相同的。
答案 1 :(得分:7)
我将其发布到Herb Sutter:
你认为“s的类型的细微差别在哪里? 汽车风格更正确“?看到 C++11 type deduction vs const char *
以下是他的回复:
我想我记得自动版推出了一个数组,就是这个 没有。如果我有其他想法,我现在已经忘记了,所以 我删除了那个短语,并将你的绰号添加到了 致谢。感谢您的反馈!