Форум программистов, компьютерный форум CyberForum.ru

[Теория] Преобразование Struct * <=> Type * - C++

Восстановить пароль Регистрация
 
icpu
 Аватар для icpu
276 / 181 / 36
Регистрация: 10.03.2011
Сообщений: 863
Записей в блоге: 2
03.03.2013, 17:52     [Теория] Преобразование Struct * <=> Type * #1
Здравствуйте, Господа и Дамы.
Немного теории, коротко и без зевоты.

Итак, есть структура с однотипными переменными.
C++
1
2
3
4
struct coordinat3f{ 
float x, y, z;
};
coordinat3f coord;
и есть указатель на переменные того же типа
C++
1
float * f;
Проведём простой
C++
1
f = reinterpret_cast < float * > ( &coord );
и напишем что-нить вроде
C++
1
cout << f[0] << ' ' << f[1] << ' ' << f[2] << endl;
Взлетит ли велосипед (у меня на тестовом обрезке вроде взлетал)? Будет ли здесь undefined behaviour? И что будет, если структура возымеет функции-члены?
C++
1
2
3
4
struct coordinat3f{
float x, y, z;
coordinat3f operator= (const coordinat3f);
}
Сразу отсекаю структуры с разносольем: все переменные строго одного типа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 17:52     [Теория] Преобразование Struct * <=> Type *
Посмотрите здесь:

ошибка type qualifier 'std' must be a struct or class name C++
E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'Binary' C++
error C2228: left of '.add' must have class/struct/union type. в чем ошибка? C++
C++ Mix of type 'bool' and type 'float'
C++ С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить?
std::bind1st: is not a class, struct, or union type C++
Incomplete type used in nested type specifier - Итерация по списку аргументов C++
Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
03.03.2013, 18:17     [Теория] Преобразование Struct * <=> Type * #2
К первому элементу вы точно можете обратиться таким образом (9.2/21). Да и то, если это обычная сишная структура. В остальных случаях — не обязательно. В принципе, ничто не удерживает компилятор от влепливания паддинга между полями. Элементы массива он обязан размещать строго последовательно, но поля одного типа это не массивы (хоть 99%, что паддинга не будет). Ну и если это не обычная сишная структура (определение см. в 9/7 того же стандарта), то даже к первому элементу нельзя так обращаться.
Yandex
Объявления
03.03.2013, 18:17     [Теория] Преобразование Struct * <=> Type *
Ответ Создать тему
Опции темы

Текущее время: 02:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru