C ++ 11 тип удержания против const char *

В ПОЛУЧИЛ 94, Херб Саттер проводит различие между «классическим C ++» объявлением

const char* s = "Hello";

и «современный» стиль

auto s = "Hello";

Он говорит нам, что есть «тонкая разница в типе s, где auto стиль более правильный «. [Отредактировано, чтобы добавить: комментарии предполагают, что это может быть неправильное представление о том, что на самом деле имел в виду Саттер; см. обсуждение ниже.]

Но … какая разница? У меня сложилось впечатление, что 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"

Где та тонкая разница, на которую ссылается Саттер?

10

Решение

Вы не совсем понимаете, что сказал Херб (контекст важен), но в любом случае типы одинаковы.

7

Другие решения

Я отправил это в Херб Саттер:

Что вы думаете, это «тонкая разница в типе s, где
авто стиль более правильный »? Увидеть
C ++ 11 тип удержания против const char *

И вот его ответ:

Я думаю, что я имел в виду, что автоматическая версия вывела массив, который он
не делает. Если бы я имел в виду что-то еще, я забыл это сейчас, так
Я удалил эту фразу и добавил ваше прозвище в
Выражение признательности. Спасибо за ответ!

7

По вопросам рекламы [email protected]