Неизменяемые константные указатели gccC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неизменяемые константные указатели gcc

Сообщение Anonymous »

мой вопрос может быть помечен как дубликат такого вопроса
Const указатель на указатель на const int приводит к const указатель на указатель на int
но, честно говоря, я тоже борюсь с результатом этого вопроса.
Я пытаюсь разобраться в указателях в целом.
что такое const.
что является неизменяемым .
первый удар по слову «const» в Google говорит:
Вы используете ключевое слово const для объявления постоянного поля или локальной константы. Поля констант и локальные значения не являются переменными и не могут быть изменены. Константы могут быть числами, логическими значениями, строками или нулевой ссылкой. Не создавайте константу для представления информации, которую вы ожидаете изменить в любой момент.
мой пример кода

Код: Выделить всё

struct str
{
str() : c2('2')
{
//char* p = (char*)this+2;
*((char*)this+2) = '0'; // set last element in ch

// this will not compile as it try's to set the value of 'const char c2'
//c2 = '2'; // error: assignment of read-only member ‘str::c2’

// but this will compile and change the value of 'const char c2'
*((char*)((str*)this)+5) = 'X';

//str* p = (str*)this;
//char* c = (char*)(p)+5;
//*c++ = 'X';
}
char ch[3] = "00";
char c0 = '0';
char c1 = '1';
const char c2 = '2';
char c3 = '3';
char c4 = '4';
char c5 = '5';
char c6 = '6';
char c7 = '7';
char c8 = '8';
char c9 = '9';
char c_ = '\0';
const char* get_ptr() { return (const char*)this; };
};
int main()
{
str str1;
printf(str1.get_ptr());
}
В моей голове 'const char c2 = '2'' является неизменным значением и, следовательно, не может быть изменен.
Я попробовал объявить c2 как ' const char const c2 = '2';' пытаюсь смириться с неизменяемыми объектами и неизменяемыми ссылками, но это не компилируется, выдавая ошибку: дубликат 'const''
является ли 'const char c2 = '2'' неизменяемым?
реалистично, действительно ли термин «неизменяемый» по отношению к gcc действительно близок к определению «неизменяемого», поскольку я уверен, что вещи на уровне операционной системы все равно будут способны изменять блоки физических данных, не имеющие ничего общего с cpp.
Я просто упустил что-то простое, и 'const char const c2 = '2'' все равно не является неизменяемым?
пожалуйста, просто разберитесь с этим, скажите я тупой, и почему, спасибо

Подробнее здесь: https://stackoverflow.com/questions/790 ... t-pointers
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»