В языке указатель типа void* можно использовать как в правой части оператора присваивания, так и для инициализации указателей любого типа; в языке C++ это невозможно.
Также вам может показаться, что такая тема как http://plastiksurgery98.ru/operatsii/57-uvelichenie-grudi.html никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт plastiksurgery98.ru
Тема увеличение груди там представлена весьма широко.
Рассмотрим пример.
void* alloc(size_t x); /* выделяет x байтов */
void f (int n)
{
int* p = alloc(n*sizeof(int)); /* OK в языке C;
ошибка в языке C++ */
/* */
} ’ ’ ’
Здесь указатель типа void* возвращается как результат функции alloc() и неявно преобразовывается в указатель типа int*. В языке C++ мы могли бы переписать эту строку следующим образом:
int* p = (int*)alloc(n*sizeof(int)); /* OK и в языке C,
и в языке C++ */
Мы использовали приведение в стиле языка C (раздел 27.3.4), чтобы оно оказалось допустимым как в программах на языке C, так и в программах на языке C++. Iwl Почему неявное преобразование void* в T* является недопустимым в языке С++? Потому, что такие преобразования могут быть небезопасными.
void f()
{
char i = 0; char j = 0; char* p = &i; void* q = p;
int* pp = q; /* небезопасно; разрешено в языке C, ошибка в языке C++ */
*pp = -1; /* перезаписываем память, начиная с адреса &i */
}
В данном случае мы даже не уверены, какой фрагмент памяти будет перезаписан: переменная j или часть памяти, на которую ссылается указатель p? А может быть, память, использованная для управлении вызовом функции f() (стек функции f)? Какие бы данные ни были перезаписаны, вызов функции f() приведет к печальным последствиям.
Обратите внимание на то, что (обратное) преобразование указателя типа т* в указатель типа void* является совершенно безопасным, — вы не сможете придумать ужасные примеры, подобные предыдущему, — и они допускаются как в языке C, так и в языке C++.
К сожалению, неявное преобразование void* в т* широко распространено в языке C и, вероятно, является основной проблемой совместимости языков С и С++ в реальных программах.
Опубликовал katy
May 01 2015 10:39:44 ·
0 Комментариев ·
3568 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.