| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
|
|
||
| ```cpp | ||
| char c = 0; | ||
| bool b = *(bool *)&c; // 可以,b = false |
There was a problem hiding this comment.
为什么把原来的代码删除了?
Sorry, something went wrong.
There was a problem hiding this comment.
原来的写法导致 UB。你觉得应该保留吗?
Sorry, something went wrong.
There was a problem hiding this comment.
你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。
Sorry, something went wrong.
There was a problem hiding this comment.
你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。
这里的类型双关是单向的。只能通过 char 泛左值访问 bool 对象,但不能反过来。是否有什么资料导致你认为类型双关是双向的呢?
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
Fixes #74.
严格来说标准并未要求 sizeof(bool) == 1,并且标准允许字节有更多的位。更正后的写法只是适用于绝大多数平台。