Предупреждение: результат выражения не используется при возврате объекта с конструктором с двумя аргументами - PullRequest
0 голосов
/ 04 марта 2019

У меня есть класс, представляющий буфер сложных значений для обработки 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 голосов
/ 04 марта 2019

В выражении

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

Результат выделенного выражения приведения не используется.Оператор return может быть упрощен до (при условии, что первое преобразование не имеет побочных эффектов):

return static_cast<SampleType> (im);

Я подозреваю, однако, что это не то, что вы намеревались (хорошо, что у вас включены предупреждения, а?).Возможно, вы намеревались использовать и реальную часть?В этом случае вам, вероятно, следовало бы написать вместо:

return {static_cast<SampleType> (re), static_cast<SampleType> (im)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...