From a quick flick through the major problem I see is in your SetVertexBuffers call:
g_pDeviceContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &zero, &zero);
Basically you are setting the vertex buffer stride to 0. Your stride is actually 12 bytes.
UINT stride = 12;
g_pDeviceContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &zero);
This is something the debug runtime ought to report to you if you create your device and swap chain with the correct flag:
HR(D3D11CreateDeviceAndSwapChain(NULL,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_DEBUG,
NULL,
0,
D3D11_SDK_VERSION,
&scd,
&g_pSwapChain,
&g_pDevice,
NULL,
&g_pDeviceContext));
Use it to save yourself loads of time tracking down bugs.
Its all worth bearing in mind that rendering a cube without a depth buffer will cause polygons to overlap each other in weird ways. You should definitely create and bind a DepthStencilView ...
Edit: Looking again its possible your view matrix is actually looking away from the object (I can't be 100% on that as I haven't gone through all the maths).
Try using XMMatrixLookAtLH instead.
constants.ViewMatrix = XMMatrixLookAtLH( XMVector( 0, 0, -50.0f ), XMVector( 0.0f, 0.0f, 0.0f ), XMVector( 0.0f, 1.0f, 0.0f ) );