Есть такой код:
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 нельзя просто так поставить указывать на строковый литерал.
Комментариев нет:
Отправить комментарий