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%无警告的代码。我是遇到一些奇怪的编译器错误还是在这里忽略了一些显而易见的东西?任何指针表示赞赏!
答案 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)};