你能投出sizeof的结果吗?

时间:2017-03-31 08:01:58

标签: c++ sizeof

我想知道是否有必要投出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。

2 个答案:

答案 0 :(得分:1)

是的,您可以投放sizeof的结果,因为sizeof(something)是编译时间,如果(size_t)5返回sizeof(something),您将获得5类型的结果

答案 1 :(得分:0)

您的问题会缩小为“您可以将std::size_t转换为其他类型”。

当然你可以遵守普通的类型转换规则。例如,将其转换为int可能会让您在16位int的系统上使用非常大的类型的热水。换句话说,检查新类型是否具有足够的容量。

如果您可以在编译时间在C ++中执行此操作,则会有额外的布朗尼点。