表达式必须是可修改的左值

E_l*_*ner 26 c++ if-statement

我有以下代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误说:

错误:表达式必须是可修改的值

在那个"如果"线上.我不是想在这里修改"匹配"或"k"值,但为什么会出现这个错误?如果我只写它:

if ( match == 0 )
Run Code Online (Sandbox Code Playgroud)

没关系.有人可以向我解释一下吗?

Ker*_* SB 34

赋值运算符的优先级低于&&,因此您的条件等效于:

if ((match == 0 && k) = m)
Run Code Online (Sandbox Code Playgroud)

但是这个左边是一个右值,即由子表达式的评估产生的布尔值match == 0 && k,所以你不能赋值给它.

相比之下,比较具有更高的优先级,因此match == 0 && k == m相当于:

if ((match == 0) && (k == m))
Run Code Online (Sandbox Code Playgroud)

  • @KunalMukherjee 嗯,从来没有? (2认同)

Ala*_*lan 18

在C中,如果声明一个,你也会遇到同样的错误:

char array[size];
Run Code Online (Sandbox Code Playgroud)

而不是尝试分配值而不指定索引位置:

array = '\0'; 
Run Code Online (Sandbox Code Playgroud)

通过做:

array[index] = '0\';
Run Code Online (Sandbox Code Playgroud)

您正在指定先前声明的可访问/可修改地址.


tom*_*ahh 7

您测试k = M而不是k == M.
也许这就是你想要做的,在这种情况下,写if (match == 0 && (k = M))