c – reinterpret_cast何时修改位?

前端之家收集整理的这篇文章主要介绍了c – reinterpret_cast何时修改位?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从C标准:

5.2.10.3

The mapping performed by reinterpret_cast might,or might not,produce
a representation different from the original value.

我在这个网站上接受过培训,相信并重复一遍. (即使可能只是琐事).从float *到int *的reinterpret_cast允许产生不同的位模式.唯一的保证是reinterpret_cast的结果返回到float *将产生原始位模式.

我的问题:这是否会发生?现有的真实世界的平台或cpu或编译器是否实际重新解释为不同的位模式?如果没有,那么reinterpret_cast是否存在任何运行时开销的真实情况呢?

根据我对reinterpret_cast的所有经验,演员是编译器的指令,而不是运行时间.

解决方法

我曾经在char *大于int *的平台上工作,即使在平台上也有不同的布局 大小是一样的.所讨论的机器都不是 然而,今天特别相关(尽管第二,PDP-10是其全盛时期更重要的机器之一). 也可以想象,一些英特尔的编译模式 本机模式(或以前称为纯模式)将会 在一个reinterpret_cast中甚至是一个“归一化”指针 隐式转换,以方便地址比较. 这也是可以想象的(虽然我没有看到它)这样 转换执行正确的对齐,例如一个转换 char * to int *可能会将2个低位位强制为0 不过,实际上,我今天认为,你不可能 看到reinterpret_cast在数据指针之间进行任何更改 类型.这个问题更具历史意义. (但我不知道 现代嵌入式处理器.从我所了解的,其中很多 是字寻址,所以如果sizeof(int)!= sizeof(char),他们是 可能需要一个特殊的格式来解决char.)

猜你在找的C&C++相关文章