首页 > 解决方案 > 警告:返回带有两个参数构造函数的对象时,表达式结果未使用

问题描述

我有一个类表示用于 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% 无警告代码。我是否面临一些奇怪的编译器错误,或者我在这里忽略了一些完全明显的东西?任何指针表示赞赏!

标签: c++clang

解决方案


在表达式中

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

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

return static_cast<SampleType> (im);

但是,我怀疑这不是您想要的(您启用了警告是一件好事,嗯?)。也许你也打算使用真实的部分?在这种情况下,您可能应该改为:

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

推荐阅读