C ++ 11类型演绎与const char *

时间:2014-12-18 15:50:25

标签: c++ c++11 char auto gotw

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所指的微妙差异在哪里?

2 个答案:

答案 0 :(得分:7)

你并不完全清楚赫伯所说的(背景很重要),但无论如何都是相同的。

答案 1 :(得分:7)

我将其发布到Herb Sutter

  

你认为“s的类型的细微差别在哪里?   汽车风格更正确“?看到   C++11 type deduction vs const char *

以下是他的回复:

  

我想我记得自动版推出了一个数组,就是这个   没有。如果我有其他想法,我现在已经忘记了,所以   我删除了那个短语,并将你的绰号添加到了   致谢。感谢您的反馈!