Şu anda C ++ Primer kitabıyla C ++ öğreniyorum ve kitaptaki alıştırmalardan biri:
Aşağıdaki ifadenin ne yaptığını açıklayın:
someValue ? ++x, ++y : --x, --y
Biz ne biliyoruz? Üçlü operatörün virgül operatöründen daha yüksek önceliğe sahip olduğunu biliyoruz. İkili operatörlerde bunu anlamak oldukça kolaydı, ancak üçlü operatörle biraz mücadele ediyorum. İkili operatörler ile "daha yüksek önceliğe sahip" ifadesi, daha yüksek önceliğe sahip ifadenin etrafında parantezler kullanabileceğimiz ve yürütmeyi değiştirmeyeceği anlamına gelir.
Üçlü operatör için şunu yapardım:
(someValue ? ++x, ++y : --x, --y)
etkili bir şekilde aynı kodla sonuçlanır ve bu da derleyicinin kodu nasıl gruplayacağını anlamama yardımcı olmaz.
Bununla birlikte, bir C ++ derleyicisiyle test ettiğimden, ifadenin derlendiğini biliyorum ve bir :
operatörün kendi başına neyi temsil edebileceğini bilmiyorum . Böylece derleyici üçlü operatörü doğru yorumluyor gibi görünüyor.
Sonra programı iki şekilde çalıştırdım:
#include <iostream>
int main()
{
bool someValue = true;
int x = 10, y = 10;
someValue ? ++x, ++y : --x, --y;
std::cout << x << " " << y << std::endl;
return 0;
}
Sonuçlar:
11 10
Öte yandan, someValue = false
bununla birlikte şunları yazdırır:
9 9
Neden C ++ derleyici, üçlü operatörün gerçek dalı için yalnızca x
artarken, üçlü öğenin yanlış dalı için hem x
ve hem de azaltan kod üretiyor y
?
Hatta gerçek dalın etrafına parantez koyacak kadar ileri gittim:
someValue ? (++x, ++y) : --x, --y;
ama yine de sonuçlanır 11 10
.
?
olan koşullu operatör . Üçlü operatör terimi, basitçe üç işlenenli bir operatör anlamına gelir. Koşullu operatör, üçlü operatörün bir örneğidir , ancak bir dil (teorik olarak) birden fazla üçlü operatöre sahip olabilir.