Доброго времени суток.
В Си с помощью указателя я могу изменить значение константы.
const int a = 5;
int *p = &a;
*p = 10;
printf("%d", a);
Вывод:10
В Си++ компилятором допускается следующий код:
const int a = 5;
int *p = (int *) &a;
*p = 10;
std::cout << *p << " " << a;
Вывод:10 5
Значение по адресу указателя p изменилось, в то время как сама a - нет? Как это работает?
Ни в С, ни в С++ никаким способами не разрешается изменять значение константного объекта. Любые попытки такого изменения приводят к неопределенному поведению. Именно неопределенное поведение вы и наблюдаете в обоих своих примерах.
Язык С
6.7.3 Type qualifiers
6 If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non-const-qualified type, the behavior is undefined.
Язык С++
9.1.7.1 The cv-qualifiers
4 Except that any class member declared mutable can be modified, any attempt to modify a const object during its lifetime results in undefined behavior.
В Си с помощью указателя я могу изменить значение константы.
Нет, конечно. Такая инициализация указателя не допускается ни в С, ни в С++
const int a = 5;
int *p = &a;
Неявного преобразования const int *
к int *
в этих языках нет. Такое преобразование можно сделать только явно. Но и явное преобразование не поможет вам "изменить константу".
Как это работает?
Никак не работает. Неопределенное поведение.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем добрый деньПосмотрел много вариантов решения проблемы но что то ничего не помогает
Подскажите, как задать точность вывода float/double числа через printf?
Требуется скопировать файл из одной папки в другуюСделать это было решено через функцию "fileCopy()"
Я новичок в Андроиде , и во время разработки у меня возникла проблема с сохранением AndroidSpinner при повороте єкрана