(char *) & obj альтернативы - PullRequest
       22

(char *) & obj альтернативы

2 голосов
/ 14 апреля 2019

Я вижу, что это обычно используется при обработке файлов, (char *) & obj.Начиная с C ++ 11 существует так много методов приведения типов, как статическое приведение, не можем ли мы использовать один из них?

1 Ответ

4 голосов
/ 14 апреля 2019

Знак & есть, чтобы взять адрес obj.

Пример:

#include <cstdio>

void printData(const char* p, int n) {
  for(int i = 0; i < n; i++)
    printf("byte %2d : %d\n", i, (int)p[i]);
}

struct DataStruct {
  int x;
  int y;
};

int main() {
  DataStruct obj;
  obj.x = 5;
  obj.y = 257;
  char* dataPtr = (char*)&obj;
  printData(dataPtr, sizeof(DataStruct));
  return 0;
}

где маневр (char *) & obj используется для получения символа *, который можно передать в функцию printData, которая просто хочет, чтобы массив символов печатался.

В этом примере строка

char* dataPtr = (char*)&obj;

вместо этого мог бы быть написан с использованием reinterpret_cast следующим образом:

char* dataPtr = reinterpret_cast<char*>(&obj);

, который сделал бы то же самое. Преимущество использования reinterpret_cast вместо cryptic (char *) & obj состоит в том, что когда вы пишете reinterpret_cast, становится более отчетливо видно, что вы делаете что-то странное и, возможно, опасное в этот момент кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...