gpt4 book ai didi

c++ - C++ 中的条件表达式总是 bool 类型吗?

转载 作者:IT老高 更新时间:2023-10-28 22:35:42 25 4
gpt4 key购买 nike

在 C 中,面向条件的运算符计算为 10类型 int (即使它确实有专用的 _Bool 类型)。引用 C11 N1570 draft :

C11 §6.5.8/6 Relational operators

Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false.107) The result has type int.

C11 §6.5.9/3 Equality operators

The == (equal to) and != (not equal to) operators are analogous to the relational operators except for their lower precedence.108) Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int. For any pair of operands, exactly one of the relations is true.

C11 6.5.13/3 Logical AND operator

The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

C11 6.5.14/3 Logical OR operator

The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

我检查过 C++ 在这件事上似乎有所不同,如下例所示(参见 http://ideone.com/u3NxfW):

#include <iostream>
#include <typeinfo>

int main() {
double x = 10.0;

std::cout << typeid(x <= 10.0).name() << std::endl;

return 0;
}

输出 b ,我猜这表明bool类型。 C++ 是否保证所有这些运算符的计算结果始终为 bool?类型(与 C 相比)?

最佳答案

不,因为运算符重载。这个之前已经提过,但是我可以举出expression templates的真实例子。 .通常,这个想法是允许编写“惰性”表达式(实际上是函数对象或 AST s),其语法与正常、急切地使用逻辑运算符非常相似。通常,许多其他运算符,特别是算术运算符也会被重载。

例如,Boost.Lambda 的一个设计目标是简化算法的使用:

std::string str;
// ...
std:.string::iterator firstA = std::find_if(str.begin(), str.end(), _1 == 'a' || _1 == 'A');

以前,在“纯”C++98 中,通常需要编写大量命名函数或函数对象才能有效地使用许多标准算法。

自 C++11 起,Boost.Lambda 不再有用,因为 lambda 表达式已添加到核心语言中。仍然有许多 EDSL(嵌入式特定领域语言),其中 C++11 lambda 无法替换表达式模板,例如您可能希望以类似于 .NET 中的 LINQ 的方式直接从 C++ EDSL 生成 SQL 命令字符串,但作为可移植库解决方案。另一个例子:VexCL库使用表达式模板生成 GPU 内核。

这可能是重载逻辑运算符唯一合法使用的非 bool 返回类型,但它通常不被认为是深奥的。

关于c++ - C++ 中的条件表达式总是 bool 类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28091563/

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