如何进行资格转换?

use*_*635 2 c++ pointers const

我有一个例子:

int i = 1;
const int *b = &i;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不明白的是,当地址i转换为指向const int的指针时.i在资格转换中是否将转换为const整数?在应用资格转换时,引擎盖下到底发生了什么?

Dan*_*ani 6

引擎盖下没有任何事情发生.const是严格编译时实体.编译器仅使用知识const来判断语句是否是错误而不是用于生成代码.因此如下:

int i = 1;
const int *b = &i;
Run Code Online (Sandbox Code Playgroud)

相当于

int i = 1;
int *b = &i;
Run Code Online (Sandbox Code Playgroud)

就生成的代码而言.但是,如果您执行以下操作:

int i = 1;
const int *b = &i;
*b = 1;
Run Code Online (Sandbox Code Playgroud)

编译器会注意到bconst(虽然它什么都不知道的i),并会出错误.但是,任何不被视为添加const的错误的语句都将生成具有或不具有const的相同代码.