在我的理解中,左值只是一个位置,其对应的右值是存储在该位置的值。例如:
int x;
x = 0; /* the compiler will replace x with the location where 0 will be stored */
int y = x; /* x works as an rvalue here, its content is unknown until run time */
编译器能否在编译时就知道第三行x的值为0,这样就可以直接用值0初始化y(而不是等到运行时,在运行时先得到x的值再给那个值到 y)?
int *p = &x;
*p = 3;
这里第二行中的 *p 是一个左值(x 的位置)。因为 &x 在编译时是已知的,所以 *p 在编译时也是已知的,对吧?
编译器会简单地将 *p 替换为 x 的位置,还是会生成首先获取存储在 p 中的地址,然后将 3 分配给该地址的代码?