Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11类型推断与常量字符*_C++_C++11_Char_Auto_Gotw - Fatal编程技术网

C++ C++;11类型推断与常量字符*

C++ C++;11类型推断与常量字符*,c++,c++11,char,auto,gotw,C++,C++11,Char,Auto,Gotw,在中,Herb Sutter区分了“经典C++”声明 const char* s = "Hello"; 以及“现代”风格 他告诉我们,“s的类型存在细微差异,auto风格更为正确”。[编辑后添加:评论表明,这可能不是Sutter实际意思的公平表述;见下文讨论。] 但是。。。有什么区别?我的印象是,constchar*是引用字符串文字的正确方法。此外,当我询问我的调试器(lldb)时,它似乎认为类型实际上是相同的: * thread #1: tid = 0x1756c2, 0x000000010

在中,Herb Sutter区分了“经典C++”声明

const char* s = "Hello";
以及“现代”风格

他告诉我们,“
s
的类型存在细微差异,
auto
风格更为正确”。[编辑后添加:评论表明,这可能不是Sutter实际意思的公平表述;见下文讨论。]

但是。。。有什么区别?我的印象是,
constchar*
是引用字符串文字的正确方法。此外,当我询问我的调试器(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"

萨特提到的细微差别在哪里?

你不完全清楚赫伯说了什么(上下文很重要),但无论如何类型都是一样的。

我把这篇文章发到:

你认为“s型的细微差别在哪里?” “自动样式更正确”?看见

以下是他的回答:

我想我已经考虑到自动版本推导出了一个数组,它 没有。如果我有别的想法,我现在已经忘了,所以 我已经删除了这个短语,把你的名字添加到 致谢。谢谢你的反馈


我认为这是一个极其微妙的区别,没有区别。他可能会认为
auto
会推导出一个数组,但它不会。萨特实际上说,“例如,你能发现s的类型有细微的区别,自动样式更正确吗?”你的解释给了这个语句一个完全不同的含义。@kiss-o-matic:No,数组到指针的转换是在类型推断过程中应用的。@remyabel他极力暗示该语句存在差异。如果真的没有区别的话,我不知道他想表达什么意思。他(在那篇文章中)没有说更多的话,只是引用了问题中的话。我很确定你是对的,没有任何区别,无论是微妙的还是其他的。多亏了这一点,以及上面@remyabel的评论。我相信你是对的,我没有完全理解他的观点,但即使在几次重读之后,我也不确定他到底在说什么。如果对类型进行细微的更改,自动版本可能更易于维护。
* 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"