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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
icpu
 Аватар для icpu
280 / 185 / 37
Регистрация: 10.03.2011
Сообщений: 873
Записей в блоге: 2
#1

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

03.03.2013, 17:52. Просмотров 216. Ответов 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 *
Посмотрите здесь:

typedef struct C++
C++ Struct{...}
Struct{...} C++
Ошибка type qualifier 'std' must be a struct or class name C++
C++ struct (с++)
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++ struct
C++ Mix of type 'bool' and type 'float'
std::bind1st: is not a class, struct, or union type C++
Could not convert variant of type (Null) into type (String) C++
Argument of type char is incompatible with parameter of type char * C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1242 / 991 / 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 *
Ответ Создать тему
Опции темы

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