6.5 — Operatorowi przecinka

OperatorSymbolFormularzOperacja
Przecinek,x, yOceń x, a następnie y, zwraca wartość y

Klasa operator przecinka (,) umożliwia ocenę wielu wyrażeń wszędzie tam, gdzie dozwolone jest pojedyncze wyrażenie. Operator przecinka ocenia lewy operand, następnie prawy operand, a następnie zwraca wynik prawego operandu.

Na przykład:

#include <iostream>

int main()
{
    int x{ 1 };
    int y{ 2 };

    std::cout << (++x, ++y) << '\n'; // increment x and y, evaluates to the right operand

    return 0;
}

Najpierw oceniany jest lewy operand operatora przecinka, który zwiększa się x z 1 Do 2. Następnie oceniany jest prawy operand, którego wartość zwiększa się y z 2 Do 3. Operator przecinka zwraca wynik prawego operandu (3), który jest następnie wypisywany na konsolę.

Zauważ, że przecinek ma najniższy priorytet ze wszystkich operatorów, nawet niższy niż przypisanie. Z tego powodu poniższe dwa wiersze kodu wykonują różne zadania:

z = (a, b); // evaluate (a, b) first to get result of b, then assign that value to variable z.
z = a, b; // evaluates as "(z = a), b", so z gets assigned the value of a, and b is evaluated and discarded.

To sprawia, że ​​użycie operatora przecinka jest nieco niebezpieczne.

Niemal w każdym przypadku instrukcja napisana przy użyciu operatora przecinka byłaby lepiej napisana jako osobna instrukcja. Na przykład powyższy kod można zapisać jako:

#include <iostream>

int main()
{
    int x{ 1 };
    int y{ 2 };

    ++x;
    std::cout << ++y << '\n';

    return 0;
}

Większość programistów w ogóle nie używa operatora przecinka, z jednym wyjątkiem inside dla pętli, gdzie jego użycie jest dość powszechne. Pętle for omówimy w przyszłej lekcji 8.10 -- Dla instrukcji.

Najlepsza praktyka

Unikaj używania operatora przecinka, z wyjątkiem dla pętli.

Przecinka jako separatora

W C++ symbol przecinka jest często używany jako separator i te użycia nie wywołują operatora przecinka. Kilka przykładów przecinków oddzielających:

void foo(int x, int y) // Separator comma used to separate parameters in function definition
{
    add(x, y); // Separator comma used to separate arguments in function call
    constexpr int z{ 3 }, w{ 5 }; // Separator comma used to separate multiple variables being defined on the same line (don't do this)
}

Nie ma potrzeby unikania przecinków oddzielających (z wyjątkiem deklaracji wielu zmiennych, czego nie należy robić).

guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
260 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze