我想知道是否有必要投出sizeof的结果?
例如:
将sizeof(example)
更改为(size_t) sizeof(example)
返回类型为std::size_t
,但我收到错误"无效的争论"在许多函数(malloc,memset,...)和演员之后它工作。快速检查printf
向我展示了结果保持不变。
-edited-
根据要求提供了一个简短的示例功能:
__cxa_dependent_exception* __cxxabiv1:: __cxa_allocate_dependent_exception() throw()
{
__cxa_dependent_exception *ps_ret;
ps_ret = static_cast<__cxa_dependent_exception *> (o_exception_pool.allocate (
(size_t) sizeof(__cxa_dependent_exception )));
if (!ps_ret)
{
std::terminate ();
}
memset (ps_ret, 0, (size_t) sizeof(__cxa_dependent_exception ));
return ps_ret;
}
如果没有强制转换,此代码会抛出上述错误。完整的示例可以在gcc 4.5.4源代码中找到&#34; libstdc ++ - v3 / libsupc ++ / eh_alloc.cc&#34;
我正在使用MinGW。
答案 0 :(得分:1)
是的,您可以投放sizeof
的结果,因为sizeof(something)
是编译时间,如果(size_t)5
返回sizeof(something)
,您将获得5
类型的结果
答案 1 :(得分:0)
您的问题会缩小为“您可以将std::size_t
转换为其他类型”。
当然你可以遵守普通的类型转换规则。例如,将其转换为int
可能会让您在16位int
的系统上使用非常大的类型的热水。换句话说,检查新类型是否具有足够的容量。
如果您可以在编译时间在C ++中执行此操作,则会有额外的布朗尼点。