Страницы

Поиск по вопросам

четверг, 18 октября 2018 г.

Разница между const LPSTR и const char*

Есть такой код:
const LPSTR str = "str"; const char* str2 = "str";
int main() { char* w = str; char* w2 = str2; //error: cannot convert from 'const char *' to 'char *' return 0; }
Почему появляется такая ошибка понятно. Но почему такой ошибки нет строчкой выше, когда используется LPSTR? Ведь это только typedef char* LPSTR;


Ответ

Потому что typedef - это не макрос, т.е. не текстовая подстановка. В
const LPSTR str = "str";
const уже относится к самому str, а не к указуемым данным. То есть это эквивалентно следующему объявлению
char *const str = "str";
Отличие от
const char* str2 = "str";
очевидно.
Поэтому и нет ошибки в char* w = str;

Формально в современном С++
const LPSTR str = "str";
является некорректным кодом. Указатель на некостантный char нельзя просто так поставить указывать на строковый литерал.

Комментариев нет:

Отправить комментарий