在'declare&initialize'部分使用运算符“ / =”

时间:2019-02-06 02:53:15

标签: c++

我是一名最近对计算机科学感兴趣的学生。我正在研究C ++,因为我对嵌入式系统感兴趣。

当我尝试独自测试操作员/=时。我想边做边学。我写的代码是

int a / = --b + 3;

但是编译器给了我一条错误消息。但是当我将其修改为

int a = 0;
a /= --b + 3;`

效果很好。我认为这与L值和R值有关。为什么带有运算符/=的第一个示例给我一个错误,但是上面的第二个示例没问题?我可以请您参考一下以获得有关此问题的提示吗?

PS:当我测试时

int t = t / (--a + 3);

它也运作良好!有什么区别?你能指出我一些有关此的文件吗?

2 个答案:

答案 0 :(得分:4)

我想说两件事。

  • 这段代码是什么意思?
  • 它是有效的C ++语法吗?

让我们看看两者。

  

当我测试“ int a / =-b + 3”时,它有错误,但是当我修改为“ int a = 0;

     

a / =-b + 3;“,效果很好。

与Java不同,C / C ++不会自动将整数的值初始化为0,并且包含garbage value(正式称为“不确定值”)。因此int a/=--b+3;更像int a; a/=--b+3;,它仍然是毫无意义的值。

并且在声明变量时,C / C ++语法不允许/=。这是变量声明和初始化的方法。我不确定还有更多方法。

  • int a = 1;
  • int a(1);
  • int a{1};(自C ++ 11起)

答案 1 :(得分:3)

a /= b;

与以下相同:

a = a / b;

所以这意味着以下声明毫无意义:

int a /= (--b + 3);

因为它等同于:

int a = a / (--b + 3);

假设这里已经定义了b;问题是a尚未定义,因此不能用作分配的一部分。

这里的问题与以下语句的问题相同:

int a = a;

这也解释了以下代码起作用的原因:

int a = 0;
a /= (--b + 3);

因为它等效于此:

int a = 0;
a = a / (--b + 3);

由于a在上面的第二行中已知,因此可以定义RHS,并确定a的新值。

更一般而言,在变量初始化期间,不应使用诸如/=*=+=-=%=之类的运算符。如果您尝试执行此操作,则编译器(例如g ++)应返回错误。