警告:返回带有两个参数构造函数的对象时,表达式结果未使用

时间:2019-03-04 13:04:11

标签: c++ clang

我有一个类,代表用于DSP处理的复数值样本的缓冲区。对于某些简洁的代码,此类具有以下静态成员函数:

template <typename SampleType>
class SampleBufferComplex
{
public:

    ...

    /** Helper to create one Sample of the buffers SampleType in templated code */
    template <typename OriginalType>
    static std::complex<SampleType> castToSampleType (OriginalType re, OriginalType im) {return (static_cast<SampleType> (re), static_cast<SampleType> (im)); }

}

这按预期工作,但是clang抛出以下内容

Warning: "expression result unused". 

...

Note:(67, 75) in instantiation of function template specialization 'SampleBufferComplex<float>::castToSampleType<double>' requested here

...

我看不到这里未使用任何表达式结果的位置,但是我想编写100%无警告的代码。我是遇到一些奇怪的编译器错误还是在这里忽略了一些显而易见的东西?任何指针表示赞赏!

1 个答案:

答案 0 :(得分:4)

在表达式中

return (static_cast<SampleType> (re), static_cast<SampleType> (im));
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

突出显示的强制转换表达式的结果未使用。 return语句可以简化为(假设第一次转换没有副作用):

return static_cast<SampleType> (im);

但是,我怀疑这不是您真正想要的(启用警告是一件好事,是吗?)。也许您确实也打算使用实际零件?在这种情况下,您可能应该写成这样:

return {static_cast<SampleType> (re), static_cast<SampleType> (im)};