在 C++ 中从 double/int/string 自动转换为 bool

我是一名 Java 程序员,一直在尝试学习一点 C++ 以扩展我的知识.这是我认为由于隐式转换而起作用的一个小代码片段,但我想知道它引用了规范的哪一部分,以及什么时候我必须注意的其他规则它涉及隐式转换.是否有制定隐式转换规则的文档/链接/站点?

#include <vector>
#include <iostream>
#include <iterator>

int main(void) {
  using namespace std;
  vector<bool> a;
  a.push_back("asdf");
  a.push_back("");  
  a.push_back(12);  
  a.push_back(0.0);  
  copy(a.begin(),a.end(),ostream_iterator<bool>(cout,"
"));
  return 0;
}

/*
output:

1
1
1
0
*/

TIA,
佐助

llf8282 回答:在 C++ 中从 double/int/string 自动转换为 bool

指针和整数以及布尔值都是整数类型.前三个都是指针或整数,因为它们都是非零的,所以它们转换为布尔值 true.double 类型的第四个值转换为零整数值,因此 false.

无法表示为整数值(如无穷大和 NaN)的双精度数的转换未定义.

有关详细信息,请参阅 4.9,有关布尔转换",请参阅 4.12:

算术纯右值、无范围枚举、指针或指向成员类型的指针可以转换为bool 类型的纯右值.将零值、空指针值或空成员指针值转换为 false;任何其他值都将转换为 true.

A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true.

你的 0.0 是零值的算术类型.

也许你可能不熟悉 C++ 中的字符串字面量:"" 表示数组 char[1] { 0 },而这个数组(一个元素)衰减为指向其第一个元素的指针,该元素必然是非空指针.类似地,asdf"表示一个数组char[5] { 'a', 's', 'd', 'f', 0 },这又一次衰减为a(非空)指向其第一个元素的指针.角色的实际价值完全无关紧要.

这篇关于在 C++ 中从 double/int/string 自动转换为 bool的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3181269.html

大家都在问