Expressie moet een aanpasbare waarde zijn

Ik heb deze volgende code:

int M = 3; 
int C = 5; 
int match = 3;
for ( int k =0; k < C; k ++ )
{
    match --; 
    if ( match == 0 && k = M )
    {
         std::cout << " equals" << std::endl;
    }
}

Maar het geeft een foutmelding:

Fout: uitdrukking moet een aanpasbare waarde zijn

op die “als” regel. Ik probeer de waarde “match” of “k” hier niet te wijzigen, maar waarom deze fout? als ik het maar schrijf als:

if ( match == 0 )

het is oké. Zou iemand het mij kunnen uitleggen?


Antwoord 1, autoriteit 100%

De toewijzingsoperator heeft een lagere prioriteit dan &&, dus uw voorwaarde is gelijk aan:

if ((match == 0 && k) = m)

Maar de linkerkant hiervan is een rwaarde, namelijk de boolean die het resultaat is van de evaluatie van de subexpressie match == 0 && k, dus je kunt het niet toewijzen.

Vergelijken daarentegen heeft een hogere prioriteit, dus match == 0 && k == mis gelijk aan:

if ((match == 0) && (k == m))

Antwoord 2, autoriteit 64%

In C ervaar je dezelfde fout ook als je een:

. declareert

char array[size];

en probeer dan een waarde toe te wijzen zonder een indexpositie op te geven:

array = '\0'; 

Door te doen:

array[index] = '0\';

U geeft het toegankelijke / modificeerbare adres op dat eerder is gedeclareerd.


3, Autoriteit 7%

u test k = Min plaats van k == M.
Misschien is het wat u wilt doen, in dit geval, schrijf if (match == 0 && (k = M))

Other episodes