你能转换 sizeof 的结果吗
Can you cast the result of sizeof
我想知道转换 sizeof 的结果是否有意义?
示例:
将sizeof(example)
更改为(size_t) sizeof(example)
return 类型是 std::size_t
,但我在许多函数(malloc、memset 等)中得到错误 "Invalid arguements",并且在强制转换后它起作用了。 printf
的快速检查告诉我,结果保持不变。
-已编辑-
根据要求,一个简短的示例函数:
__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 源代码中找到 "libstdc++-v3/libsupc++/eh_alloc.cc"
我正在使用 MinGW。
是的,您可以转换 sizeof
的结果,因为 sizeof(something)
是编译时间,如果 sizeof(something)
returns,您将得到 (size_t)5
类型的结果] 5
.
您的问题浓缩为"can you cast std::size_t
to another type"。
当然可以,但要遵守正常的类型转换规则。例如,将其转换为 int
可能会让您在具有 16 位 int
的系统上处理非常大的类型。换句话说,检查新类型是否有足够的容量。
如果您可以在 编译 时用 C++ 做到这一点,则可额外加分。
我想知道转换 sizeof 的结果是否有意义?
示例:
将sizeof(example)
更改为(size_t) sizeof(example)
return 类型是 std::size_t
,但我在许多函数(malloc、memset 等)中得到错误 "Invalid arguements",并且在强制转换后它起作用了。 printf
的快速检查告诉我,结果保持不变。
-已编辑-
根据要求,一个简短的示例函数:
__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 源代码中找到 "libstdc++-v3/libsupc++/eh_alloc.cc"
我正在使用 MinGW。
是的,您可以转换 sizeof
的结果,因为 sizeof(something)
是编译时间,如果 sizeof(something)
returns,您将得到 (size_t)5
类型的结果] 5
.
您的问题浓缩为"can you cast std::size_t
to another type"。
当然可以,但要遵守正常的类型转换规则。例如,将其转换为 int
可能会让您在具有 16 位 int
的系统上处理非常大的类型。换句话说,检查新类型是否有足够的容量。
如果您可以在 编译 时用 C++ 做到这一点,则可额外加分。