我使用Microsoft文档和cppreference作为背景。微软网站上说,在while
中要计算的表达式必须是整型、pointer
型或其他可转换的类型。Cppreference的网站虽然说while期望一个bool
类型的表达式
到底发生了什么?表达式将转换为bool
或不一定?例如,如果我在while中使用char
类型的表达式,那么有必要将其转换为bool
吗?
根据c++ 14标准(6.4选择语句)
2条件规则既适用于选择语句,也适用于for和while语句
4
- …方法的值作为条件的值表达式,在上下文环境中将其转换为bool,用于除开关;如果转换是病态的,那么程序就是病态的。
这是一个示范程序。
#include <iostream>
struct A
{
operator int() const { return 1; };
};
int main()
{
A a;
while ( a ) break;
return 0;
}
首先使用用户定义的转换操作符将对象a
转换为类型int
。
operator int() const { return 1; };
之后,应用了从int
类型到bool
类型的标准转换。
来自c++ 14标准(4个标准转换)
7[注意:对于类类型,用户定义的转换被认为是好,见12.3。一般来说,隐式转换序列(13.3.3.1)由后跟用户定义的标准转换序列组成转换之后是另一个标准转换序列。- - -结束注意]