| Operator | Symbol | Formularz | Operacja |
|---|---|---|---|
| Przecinek | , | x, y | Oceń 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ć).

