bool类型的默认构造函数值 < P> C++中默认类型的构造函数返回C++中的哪个值?

bool类型的默认构造函数值 < P> C++中默认类型的构造函数返回C++中的哪个值?,c++,default-value,boolean,C++,Default Value,Boolean,例如,写作 int i = int(); 保证变量i始终以0启动 我想这样的初始化例程也是可能的: bool b = bool(); 但不幸的是,我找不到这样一个默认bool构造函数定义返回的值。变量b是否总是用false或true初始化布尔是整数类型,值初始化应使其为零。false 参见C++14草案N4296第8.5节(初始值设定者),第6段,列表项1和其中的参考,以及第8段,列表项4。b也用零初始化 变量b总是初始化为false还是true false 将true转换为integer类

例如,写作

int i = int();
保证变量i始终以0启动

我想这样的初始化例程也是可能的:

bool b = bool();

但不幸的是,我找不到这样一个默认bool构造函数定义返回的值。变量b是否总是用falsetrue初始化布尔是整数类型,值初始化应使其为零。

false


参见C++14草案N4296第8.5节(初始值设定者),第6段,列表项1和其中的参考,以及第8段,列表项4。

b也用零初始化

变量b总是初始化为false还是true

false

true
转换为
integer
类型将产生
1
,而将
false
转换为
0
4.5/4
4.7/4

一个非常简单的测试代码

#include<iostream>
int main()
{
  bool b=bool();

  if(!b)
  {
     std::cout<<"b: false";
  }

}
#包括
int main()
{
bool b=bool();
如果(!b)
{

std::coutbool的行为“就像它被声明一样”:

enum bool {false,true};

它是一个整型类型,可以分别作为值0和1转换为int,其默认值为false。

C++充满了“未定义的行为”使这样的实验变得危险的事情。你为什么认为上面代码的行为是未定义的?你引用的神圣标准不是这样的。但是人们不应该通过让它在自己的机器上工作来获得信心。@Alexandre C:我完全同意。这种测试代码是错误的。@DeadMG:答案是肯定的尽管如此,我还是避免了误导读者。我已经用了1+1这个,因为它是最正确的给出布尔值的答案。混淆“0”和“false”在C++中是很普遍的。(请参考!你所说的可能是事实,但你怎么知道呢?请提供一个到声明标准的链接,因为MSVC 2013默认bool为TRUE。@暴雪:bools的默认初始化等于零初始化。你确定你没有执行
bool b;
struct F{bool b;}
,在这两种情况下,
b
都无法初始化?@johanneschaub litb“将零与假混淆”是什么意思AfAIK假=0,真值=1,但我猜想它可以是实现定义,但实现是什么呢?它会打破无数的程序。+ 1:积分类型在C或C++中没有构造函数,这是JavaISM。您可以编写两行代码来打印值。请参见Alexandre C.的注释。下面是Prasoon Saurav的回答,我想知道我没有用特定编译器测试它的原因。你能为你关于int的陈述提供证据吗?