연산자의 평가 순서

연산자를 사용하여 피연산자의 평가 순서에 대해 공유하려고 생각했습니다. 초보자는 항상 평가 순서에 대해 혼란이 발생합니다 ...
내가 논의 할 4 개의 연산자가 있습니다.
AND(&&) , OR(||), 조건부(? :) 및 쉼표(,) 연산자.

위에서 언급한 모든 연산자는 왼쪽에서 오른쪽으로 평가됩니다. 그리고 이 연산자는 왼쪽 피연산자가 먼저 평가되도록 보장합니다. 또한 오른쪽 피연산자는 왼쪽 피연산자가 결과를 결정하지 않는 경우에만 평가됩니다.

// Variables used
bool bLeftOperand = false, bRightOperand = true;
int iLeftOperand  = 100, iRightOperand = 0;
struct TempStruct
{
    int m_iCount;
    string m_sName;
    TempStruct():m_iCount(0){} // member initialization
};
TempStruct *stTempPtr = NULL;



// AND (&&) Operator
// If left side operand is false right side will not be evaluated
if (bLeftOperand && bRightOperand)
    cout << "Both operands are true"<<endl;
else
    cout << "bLeftOperand operand is false but bRightOperand is true. Else case is executed based on order of evaluation"<< endl;

if (iLeftOperand && iRightOperand)
    cout << "Both operands are true"<<endl;
else
    cout << "iLeftOperand operand is true but iRightOperand is false. Else case is executed because iRightOperand is false" <<endl;

// Although stTempPtr is null pointer program will not crash during execution because of order of evaluation
if (stTempPtr && stTempPtr->m_iCount)
    cout << "Struct stTempPtr is valid pointer" <<endl;
else
    cout << "Struct stTempPtr is a NULL pointer" <<endl;



// OR (||) operator
// If left side operand is true right side will not be evaluated
if (bLeftOperand || !bRightOperand)
    cout << "Either of the operands are true"<<endl;
else
    cout << "both operands are false"<< endl;

if (iLeftOperand || iRightOperand)
   cout << "Either of the operands are true"<<endl;
else
   cout << "iLeftOperand operand is true but iRightOperand is false. Else case is executed because iRightOperand is false" <<endl;

if (stTempPtr)
   cout << "Struct stTempPtr is valid pointer" <<endl;
else
   cout << "Struct stTempPtr is a NULL pointer" <<endl;



// conditional (? :) operator
// condition ? expression1: expression2

bLeftOperand ? "operand is true \n" : "operand is false\n"
// only one of the expressions are evaluated



//comma operator (,) used to separate two or more expressions
// only the right-most expression is considered.

int b;
int a = (b=3, b+2)

//would first assign the value 3 to b, and then assign b+2 to
//variable a. So, at the end, variable a would contain the value 5
//while variable b would contain value 3.


단락 평가: 논리적 AND 및 논리적 OR 연산자가 실행되는 방식을 설명하는 데 사용되는 용어입니다. 이러한 연산자에 대한 첫 번째 피연산자가 전체 결과를 결정하기에 충분하면 평가가 중지됩니다. 두 번째 피연산자는 평가되지 않음을 보장합니다.

//Example of a short circuit
int x=20,y=40,z=60;

 if(x<y && ++y<z)   

cout<<x<<" "<<y<<" "<<z;   

else 

cout<<x<<" "<<y<<" “<<z;   
/* The output will be 
20 40 60*/

좋은 웹페이지 즐겨찾기