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

Union с явными указателями или void*- что выбрать? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Eclipse C++ библиотеки http://www.cyberforum.ru/cpp-beginners/thread631423.html
Компилятору не нравится объявление библиотеки #include <iostream> Можно ли как то это исправить? компилятор >> eclipse-cpp-helios
C++ НОЧД и НОНД(задача) Здравствуйте! Тут на одном сайте задача есть: Для двух данных натуральных чисел найдите их наибольший четный и наибольший нечетный делители. Входные данные Вводятся два натуральных числа, разделенные пробелом. Числа не превосходят 10 в степени 9. Выходные данные Выведите два числа через пробел — наибольший общий четный делитель и наибольший общий нечетный делитель. Если какого-то из... http://www.cyberforum.ru/cpp-beginners/thread631411.html
C++ Указатель на объект.объясните
base - это базовый класс...first - это производный от base...iam() виртуальная функция, перегруженная в first... Вопрос: почему вызывается функция базового класса, а не first?.. #include <iostream> #include "classes.cpp" using namespace std; int main() { base ibase; first ifirst;
C++ GetModuleFileNameEx ошибка
#include <iostream> #include <windows.h> #include <time.h> #include "main.h" #pragma comment(lib,"Psapi") using namespace std; //global ULONG crc_tab;
C++ Отсортировать по возрастанию элементы массива http://www.cyberforum.ru/cpp-beginners/thread631398.html
1)Дан массив целых чисел из 10 элементов отсортировать по возрастанию. 2)Дан действительный массив A.Напечатать индекс его отрицательных элементов. помогите пожалуйста написать программу на С++
C++ Перевод программы с Pascal на С++ uses crt; var i :integer; BEGIN ClrScr; Write('Результат: '); for i := 20 to 50 do if (i mod 3 = 0) and (i mod 5 <> 0) then Write(i, ' '); Readln; END. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2012, 02:14     Union с явными указателями или void*- что выбрать?
Выбрать лучше то, в чём сам не запутаешься, пытаясь разобраться, что это творится в коде, недельки через две. То есть явное приведение типов, которое читается однозначно.

Фактически да, оно где-то так (плюс поправка на виртуальные функции) и происходит при приведении типов туда-сюда между родственными классами. Только dynamic_cast делает ещё проверку (в рантайме), что всё точно-точно окей. reinterpret_cast не делает, как и обычный C-style каст (X*)something.

Конечно, запись foobar.asX читается приятнее, чем reinterpret_cast<X*>(foobar), но по-хорошему второй вариант является такой себе большой меткой «может случиться беда, если foobar не является X, будь предельно внимателен». Особенно, когда её приходится писать каждый раз. В идеале, конечно, лучше бы вообще от этого и всяких void* избавиться.

Лучше оставить union для более очевидного применения — всяких а-ля динамических типов: Any/DynamicAny/Variant/как-его-там-ещё-называют.
 
Текущее время: 02:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru