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

use*_*505 10 c++ char auto c++11 gotw

GotW 94中,Herb Sutter区分了"经典C++"声明

const char* s = "Hello";
Run Code Online (Sandbox Code Playgroud)

和"现代"风格

auto s = "Hello";
Run Code Online (Sandbox Code Playgroud)

他告诉我们,有一个"中的类型细微的差别s,这里的auto风格是比较正确的." [编辑补充:评论表明,这可能不是Sutter实际意义的公平表示; 见下面的讨论.]

但是......有什么区别?我的印象是a 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"
Run Code Online (Sandbox Code Playgroud)

Sutter所指的微妙差异在哪里?

phi*_*pxy 8

我把它发布到Herb Sutter:

您认为"汽车风格更正确"的"s类型的细微差别"是什么?请参阅 C++ 11类型演绎与const char*

这是他的回答:

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


Che*_*Alf 7

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

  • 他没有再说(在那篇文章中)而不是在问题中给出的引用.我很确定你是对的,没有区别,微妙或其他. (4认同)