你能转换 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++ 做到这一点,则可额外加分。