有谁知道,例如,我是否正在用 c++ 编写以下代码:
int a;
void *ptr = &a;
ptr = (char *)ptr + 1; //<-- this is the interesting line;
Run Code Online (Sandbox Code Playgroud)
only是否(char *)告诉编译器如何寻址该变量?
或者它实际上在运行时添加了更多计算?
谢谢。
在这种情况下,不进行额外的计算。
然而,在某些情况下,强制转换从技术上讲是一种转换,主要是数字输入。例如,以下内容可能会引入运行时代码(前提是它没有被优化,在这样的小示例中,您期望它会被优化):
int x = 42;
double d = (double)x;
Run Code Online (Sandbox Code Playgroud)
这里 int 和 double 的内部表示意味着你不能仅仅改变编译器如何看待变量,你还必须改变数据。