我想知道以下在编译器级别是如何工作的。
int const iVal = 5;
(int&)iVal = 10;
一点 m/c 或编译器级别的答案就足够了。
提前致谢。
最佳答案
在第一行中,您定义了一个常量整数。此后,在您的程序中,允许编译器仅将 iVal 替换为值 5。它可能会改为从内存加载它,但可能不会,因为那样不会带来任何好处。
第二行写入编译器告诉您包含数字 5 的内存位置。但是,这不能保证有任何效果,因为您已经告诉编译器该值不会改变。
例如,下面将定义一个包含5 元素的数组,并打印一个未定义的值(或者它可以做任何它想做的事!它是未定义的)
int const iVal = 5;
(int&)iVal = 10;
char arr[iVal];
cout << iVal;
生成的程序集可能类似于:
sub ESP, 9 ; allocate mem for arr and iVal. hardcoded 5+sizeof(int) bytes
; (iVal isn't _required_ to have space allocated to it)
mov $iVal, 10 ; the compiler might do this, assuming that you know what
; you're doing. But then again, it might not.
push $cout
push 5
call $operator_ltlt__ostream_int
add ESP, 9
关于c++ - 这在内部是如何工作的 int const iVal = 5; (int&)iVal = 10;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661464/