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'; // zwiększ x i y, oblicz do prawego argumentu

    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); // najpierw oceń (a, b), aby uzyskać wynik b, następnie przypisz tę wartość do zmiennej z.
z = a, b; // ocenia jako "(z = a), b", więc z otrzymuje wartość a, a b jest oceniane i odrzucane.

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) // Przecinek oddzielający używany do oddzielania parametrów w definicji funkcji
{
    add(x, y); // Przecinek oddzielający używany do oddzielania argumentów w wywołaniu funkcji
    constexpr int z{ 3 }, w{ 5 }; // Przecinek oddzielający używany do oddzielania wielu zmiennych zdefiniowanych w tej samej linii (nie rób tego)
}

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