Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему a = b не работает, но a = с + b - c работает? / 8 сообщений из 8, страница 1 из 1
12.07.2016, 18:24
    #39272613
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
char* text;
...
const char * b = text;
...
b++ ...
...
char *endofphrase = b; // не работает
char *endofphrase = text + (b - text); // работает
...
Рейтинг: 0 / 0
12.07.2016, 18:29
    #39272618
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Всё написано в сообщении об ошибке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.07.2016, 21:28
    #39272697
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
потому что
Код: plaintext
1.
const char *


не то же самое, что
Код: plaintext
1.
char *



А вообще-то вам правильн сказали - читайте, что выдаёт компилятор.
...
Рейтинг: 0 / 0
12.07.2016, 21:48
    #39272703
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Вообще-то вы оба отвечаете не на тот вопрос который задан )))
Вопрос был: почему в одном случае работает, а в другом нет?
Ответ: потому что в одном случае вы присваиваете указатель на константу в обычный указатель, и это запрещенное действие, а во втором случае вы присваиваете указатель + сдвиг в такой же указатель. Поэтому с точки зрения компилятора все нормально (он не обязан отслеживать как вы его через хаки пытаетесь обмануть).
Но не смотря на то что код скомпилировался, проблема которую изначально решал компилятор, остается та же самая - вы получили неконстантный указатель на константную память, и в скором времени собираетесь выстрелить себе в ногу, попытавшись изменить эту память.
...
Рейтинг: 0 / 0
12.07.2016, 21:50
    #39272705
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Anatoly Moskovskyвы получили неконстантный указатель на константную память

Нет. text у него это char*. И даже с прибавление ptrdiff_t он остаётся char*.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.07.2016, 22:22
    #39272713
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Dimitry SibiryakovНет. text у него это char*. И даже с прибавление ptrdiff_t он остаётся char*.
Да кто его знает что в него присвоили в первом "..." ))
...
Рейтинг: 0 / 0
12.07.2016, 22:28
    #39272714
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Anatoly MoskovskyДа кто его знает что в него присвоили в первом "..." ))

const char* в него всё равно без явных кастов или ругани компилятора не присвоить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.07.2016, 23:15
    #39272725
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему a = b не работает, но a = с + b - c работает?
Dimitry Sibiryakovconst char* в него всё равно без явных кастов или ругани компилятора не присвоить.
Строковые литералы большинство компиляторов разрешают в char* присваивать. В лучшем случае предупреждение дают.
Но кто читает эти предупреждения, скомпилировалось и ладно, правда ведь, Charles Weyland
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему a = b не работает, но a = с + b - c работает? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]