c 在 C++ 中进行强制转换,编译时还是运行时?

Roe*_*rel 3 c c++ casting

有谁知道,例如,我是否正在用 c++ 编写以下代码:

int a;
void *ptr = &a;
ptr = (char *)ptr + 1; //<-- this is the interesting line;
Run Code Online (Sandbox Code Playgroud)

only是否(char *)告诉编译器如何寻址该变量?
或者它实际上在运行时添加了更多计算?

谢谢。

Mat*_*att 5

在这种情况下,不进行额外的计算。

然而,在某些情况下,强制转换从技术上讲是一种转换,主要是数字输入。例如,以下内容可能会引入运行时代码(前提是它没有被优化,在这样的小示例中,您期望它会被优化):

int x = 42;
double d = (double)x;
Run Code Online (Sandbox Code Playgroud)

这里 int 和 double 的内部表示意味着你不能仅仅改变编译器如何看待变量,你还必须改变数据。