|
|
1
27
这就是标准所说的
所以编译器是对的。 |
|
|
2
10
但从本质上讲,左侧只评估一次。它会产生一个非常量的l值,这就是它所需要的读取值、添加值和写回值。
(注意这仅适用于C++;在C#,
|
|
3
9
你的想法合乎逻辑但不正确。
|
|
|
4
3
|
|
|
5
0
在我所见过的每种支持+=运算符的语言中,编译器都会对左侧的操作数求值一次,以生成某种类型的地址,然后用它来读取旧值和写入新值。+=运算符不仅仅是语法糖;正如您所注意到的,它可以实现表达式语义,而通过其他方法实现这些语义是很困难的。
' Assime Foo is an array of some type of structure, Bar is a function, and Boz is a variable.
With Foo(Bar(Boz))
.Fnord = 9
.Quack = 10
End With
将计算Foo(Bar(Boz))的地址,然后将该结构的两个字段设置为值9和10。它在C中相当于
{
FOOTYPE *tmp = Foo(Bar(Boz));
tmp->Fnord = 9;
tmp->Quack = 10;
}
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |