Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 表达式必须是可修改的左值_C++_If Statement - Fatal编程技术网

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

C++ 表达式必须是可修改的左值,c++,if-statement,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; } } 没关系。有人能给我解释一下吗

我有以下代码:

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;
    }
}

没关系。有人能给我解释一下吗=<代码>总是C或C++中的一个赋值。 如果(match==0&&k==M)您在
k==M
测试中输入了错误,您的测试应该是

如果你真的是指
k=M
(即测试中影响赋值的副作用),出于可读性的原因,你应该选择code
If(match==0&&(k=M)!=0)
,但大多数编码规则建议不要这样写

顺便说一句,您的错误建议请求所有警告(例如
-Wall
选项到
g++
),并升级到最新的编译器。下一个GCC 4.8将为您提供:

 % g++-trunk -Wall -c ederman.cc
 ederman.cc: In function ‘void foo()’:
 ederman.cc:9:30: error: lvalue required as left operand of assignment
          if ( match == 0 && k = M )
                               ^
Clang3.1还告诉您
ederman.cc:9:30:error:expression是不可赋值的


因此,请使用最新版本的免费编译器,并在使用它们时启用所有警告。

您测试的是
k=M
,而不是
k==M


也许这就是您想要做的,在这种情况下,如果(match==0&&(k=M))

赋值运算符的优先级低于
&&
,那么您的条件等价于:

if ((match == 0 && k) = m)
if ((match == 0) && (k == m))
但它的左边是一个右值,即对子表达式
match==0&&k
求值后得到的布尔值,因此不能对其赋值

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

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

在C语言中,如果您声明一个:

char array[size];
然后尝试在不指定索引位置的情况下分配值:

array = '\0'; 
通过这样做:

array[index] = '0\';

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

您的意思是
k==M
?幸运的是,由于
&&
=
的运算符先例,它导致了编译器错误,而不是默默地生成错误的程序!如果条件中的赋值产生了一些影响,您能列出一些用例吗sense@KunalMukherjee嗯,从来没有?@TMOTTM可能会引起一些额外的副作用