В дополнение к остальным ответам до сих пор здесь неочевидный пример, где static_cast
недостаточно, чтобы reinterpret_cast
был необходим. Предположим, что есть функция, которая в выходном параметре возвращает указатели на объекты разных классов (которые не имеют общего базового класса). Реальным примером такой функции является CoCreateInstance()
(см. Последний параметр, который фактически является void**
). Предположим, вы запрашиваете определенный класс объекта из этой функции, поэтому заранее знаете тип указателя (который вы часто делаете для COM-объектов). В этом случае вы не можете наложить указатель на указатель на void**
с помощью static_cast
: вам нужно reinterpret_cast
.
В коде:
#include
#include
.....
INetFwPolicy2* pNetFwPolicy2 = nullptr;
HRESULT hr = CoCreateInstance(__uuidof(NetFwPolicy2), nullptr,
CLSCTX_INPROC_SERVER, __uuidof(INetFwPolicy2),
//static_cast(&pNetFwPolicy2) would give a compile error
reinterpret_cast(&pNetFwPolicy2) );
Однако static_cast
работает для простых указателей (не указателей на указатели), поэтому приведенный выше код можно переписать, чтобы избежать reinterpret_cast
(at цена дополнительной переменной) следующим образом:
#include
#include
.....
INetFwPolicy2* pNetFwPolicy2 = nullptr;
void* tmp = nullptr;
HRESULT hr = CoCreateInstance(__uuidof(NetFwPolicy2), nullptr,
CLSCTX_INPROC_SERVER, __uuidof(INetFwPolicy2),
&tmp );
pNetFwPolicy2 = static_cast(tmp);
Если вам нужна одна строка, используйте order by
и limit
:
SELECT F. *
FROM FOLIOS F
ORDER BY F.FOLIO DESC
LIMIT 1;
MAX()
дляindex
. По крайней мере, это мое чтение. – Edward 13 July 2018 в 23:07