# V738. Temporary anonymous object is used.

Анализатор обнаружил, что используется временный анонимный объект, получившийся в результате работы постфиксного оператора ++ или --. Иногда это имеет смысл. Но когда речь заходит о изменении этого временного объекта или взятии его адреса, то это ошибка.

Рассмотрим первый пример:

    vector<float>::iterator it = foo();
    it++ = x;

Создаётся временная копия итератора. Итератор инкрементируется. После чего к временному объекту применяется оператор присваивания. Этот код не имеет смысла. Автор кода хотел явно сделать что-то другое. Например, он хотел в начале выполнить присваивание, а уже затем воспользоваться инкрементом.

В этом случае корректный код должен выглядеть так:

    it = x;
    it++;

Однако постфиксная операция для итераторов не эффективна. И будет лучше написать так:

    it = x;
    ++it;

Есть ещё один вариант:

    it = x + 1;

Рассмотрим второй пример:

    const vector<int>::iterator *itp = &it++;

Указатель 'itp' использовать нельзя. Он указывает на временный неименованный объект, который уже разрушен. Корректный вариант кода:

    ++it;
    const vector<int>::iterator *itp = &it;

Данная диагностика классифицируется как:

CWE-672 CERT-DCL30-C