Skip to content

修复 bool 相关的示例代码#80

Open
frederick-vs-ja wants to merge 1 commit into
parallel101:mainfrom
frederick-vs-ja:fix-bool-examples
Open

修复 bool 相关的示例代码#80
frederick-vs-ja wants to merge 1 commit into
parallel101:mainfrom
frederick-vs-ja:fix-bool-examples

Conversation

@frederick-vs-ja

Copy link
Copy Markdown
Contributor

Fixes #74.

严格来说标准并未要求 sizeof(bool) == 1,并且标准允许字节有更多的位。更正后的写法只是适用于绝大多数平台。

Comment thread docs/undef.md

```cpp
char c = 0;
bool b = *(bool *)&c; // 可以,b = false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为什么把原来的代码删除了?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

原来的写法导致 UB。你觉得应该保留吗?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你是说 bool b = *(bool *)&c; 是UB?为什么?据我所知char和任意类型的“类型双关”都是允许的,bool和char当然也是可以“类型双关”的。

这里的类型双关是单向的。只能通过 char 泛左值访问 bool 对象,但不能反过来。是否有什么资料导致你认为类型双关是双向的呢?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants