gpt4 book ai didi

c++ - 为什么 C++ 没有 &&= 或 ||= bool 值?

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:38 25 4
gpt4 key购买 nike

有没有"very bad thing" &&=||= 被用作 bool foo = foo && barbool foo = foo 的语法糖||酒吧?

最佳答案

A bool可能只是 truefalse在 C++ 中。因此,使用 &=|=相对安全(尽管我不是特别喜欢这种表示法)。的确,它们将执行位运算而不是逻辑运算(因此它们不会短路),但这些位运算遵循定义明确的映射,这实际上等同于逻辑运算,只要因为 两个操作数都是 bool 类型.1

与其他人在这里所说的相反,bool在 C++ 中绝不能有不同的值,例如 2 .将该值分配给 bool 时, 它将被转换为 true按照标准。

将无效值放入 bool 的唯一方法是通过使用 reinterpret_cast关于指针:

int i = 2;
bool b = *reinterpret_cast<bool*>(&i);
b |= true; // MAY yield 3 (but doesn’t on my PC!)

但由于此代码无论如何都会导致未定义的行为,因此我们可以安全地忽略符合 C++ 代码的潜在问题。


1 诚然,正如 Angew 的评论所示,这是一个相当大的警告:

bool b = true;
b &= 2; // yields `false`.

原因是b & 2执行整数提升,使表达式等同于 static_cast<int>(b) & 2 ,结果为 0 , 然后转换回 bool .所以 operator &&= 的存在是真的会提高类型安全性。

关于c++ - 为什么 C++ 没有 &&= 或 ||= bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com