Порядок вычисления оператора равенства [in] в C ++? - PullRequest
1 голос
/ 28 мая 2019

Каков порядок вычисления оператора равенства в C ++?

Я вижу много примеров кода, таких как this

template <class ForwardIt, class Compare>
ForwardIt is_sorted_until(ForwardIt first, ForwardIt last, Compare comp) 
{
    if (first != last) {
        ForwardIt next = first;
        while (++next != last) {
            if (comp(*next, *first))
                return next;
            first = next;
        }
    }
    return last;
}

и в while (++next != last)- оценивается ли левая сторона перед правой?

1 Ответ

4 голосов
/ 28 мая 2019

Порядок не указан, , как и большинство бинарных операторов в C ++ . Вполне допустимо, чтобы компилятор сначала оценил ++next или last, поэтому, если бы next и last были ссылками на одну и ту же базовую переменную, вы бы входили в неопределенную область поведения (в этом случае нет проблема).

...