Форум программистов, компьютерный форум CyberForum.ru

Каков тип строковых литералов? - C++

Восстановить пароль Регистрация
 
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 08:59     Каков тип строковых литералов? #1
Каков тип rvalue строки "Hello"? const char* const или const char* ?

C++
1
const char* some1 = "Hello";
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.08.2015, 09:02     Каков тип строковых литералов? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
const char[6]
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
02.08.2015, 09:05     Каков тип строковых литералов? #3
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
const char*
можно конечно и const char *const - но это уже больше к самому указателю, нежели к строке, относится.
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 09:09  [ТС]     Каков тип строковых литералов? #4
Tulosba, Kerry_Jr,
можете пожалуйста кинуть правила преобразования указателей? и в каких случаях в результате преобразования теряются квалификаторы?
В частности интересует, почему можно записать следующее без приведения указателей?
C++
1
char* some = "hello";
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11809 / 6788 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
02.08.2015, 09:25     Каков тип строковых литералов? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tulosba Посмотреть сообщение
const char[6]
Подкреплю стандартом:
Ordinary string literals and UTF-8 string literals are also referred to as narrow string literals. A narrow string literal has type “array of n const char”, where n is the size of the string as defined below, and has static storage duration
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
и в каких случаях в результате преобразования теряются квалификаторы?
Const - обещание (гарантия) или требование?

Добавлено через 11 минут
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
В частности интересует, почему можно записать следующее без приведения указателей?
С соответствующими опциями не будет:
http://rextester.com/MACX53472
DrOffset
6420 / 3794 / 877
Регистрация: 30.01.2014
Сообщений: 6,584
02.08.2015, 12:51     Каков тип строковых литералов? #6
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
В частности интересует, почему можно записать следующее без приведения указателей?
Это все ради совместимости со старым кодом. Как вот бывают, например, в русском языке исключения из правил, так и это. Если отключить эту совместимость (что выше и показали), то это не будет работать.
В любом случае, в новом коде такого снятия константности лучше не допускать.
Ferrari F1
Заблокирован
294 / 280 / 61
Регистрация: 27.01.2015
Сообщений: 1,888
Записей в блоге: 1
Завершенные тесты: 1
02.08.2015, 14:06  [ТС]     Каков тип строковых литералов? #7
Cпасибо, Кроесмах и Дрофсет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2015, 14:42     Каков тип строковых литералов?
Еще ссылки по теме:

C++ Каков будет результат выполнения следующего кода?
Каков будет результат выполнения следующего кода C++
C++ Каков будет результат выполнения следующего кода?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16822 / 5243 / 318
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
02.08.2015, 14:42     Каков тип строковых литералов? #8
Цитата Сообщение от Tulosba Посмотреть сообщение
const char[6]
Исходный пример, грубо говоря, эквивалентен

C
void foo (void)
{
  const char a[6] = "Hello";
  const char *p;
  p = a;
}
тип "a" действительно есть "const char[6]", однако правая часть выражения эквивалентна "&a[0]" с типом "const char *". Со строковым литералом всё аналогично

Ну и ТС'у может ссылка чем-то поможет http://www.cyberforum.ru/blogs/18334/blog97.html
Yandex
Объявления
02.08.2015, 14:42     Каков тип строковых литералов?
Ответ Создать тему
Опции темы

Текущее время: 20:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru