C++ 映射运算符[]和布尔作为值

C++ 映射运算符[]和布尔作为值,c++,stl,map,C++,Stl,Map,我们知道,如果我们尝试使用操作符[]访问不存在的键std::map,函数将使用该键插入新元素 我们有:std::map\u xxx 是否保证在访问map\u xxx[“nonexistent\u key”]的不存在键后,第二个参数的值将始终为false 注:如果没有,你知道如何进行这种行为吗?是的。要插入的值保证为false 在C++98中,该机制称为默认初始化,对于非类指定为零初始化;对于布尔人来说,这是false 从C++03开始,该机制称为值初始化,对于非类仍然指定为零初始化;因此对于布

我们知道,如果我们尝试使用操作符[]访问不存在的键
std::map
,函数将使用该键插入新元素

我们有:
std::map\u xxx

是否保证在访问
map\u xxx[“nonexistent\u key”]
的不存在键后,第二个参数的值将始终为
false


注:如果没有,你知道如何进行这种行为吗?

是的。要插入的值保证为
false


在C++98中,该机制称为默认初始化,对于非类指定为零初始化;对于布尔人来说,这是
false

从C++03开始,该机制称为值初始化,对于非类仍然指定为零初始化;因此对于布尔人来说仍然是
false
。例如,让我们看看C++14对此有何评论

从§23.4.4.3开始;只需将“T”替换为
bool

T&运算符[](常量键类型&x)

  • 效果:如果映射中没有与x等价的键,则将值类型(x,T())插入到映射中
  • 要求:键类型应为可复制插入,映射类型应为可默认插入 *这个
  • 根据§8.5,从下到上消化段落:

    将类型为T的对象或引用初始化为零意味着:

    -如果T是标量类型(3.9),则对象初始化为通过将整数文本0(零)转换为T而获得的值

    要初始化类型为T的对象意味着:

    -如果T是一个(可能是cv限定的)类类型(第9条),没有默认构造函数(12.1)或用户提供或删除的默认构造函数,则对象默认初始化

    -如果T是一个(可能是cv限定的)类类型,没有用户提供或删除的默认构造函数,则该对象为零初始化,并检查默认初始化的语义约束,如果T有一个非平凡的默认构造函数,则该对象为默认初始化

    -如果T是数组类型,则每个元素都初始化为值

    -否则,对象将初始化为零

    初始值设定项为空括号集的对象,即(),应为值初始化的对象

    从§4.12开始:

    算术、非范围枚举、指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue。零值、空指针值或空成员指针值将转换为false;任何其他值都将转换为true。对于直接初始化(8.5),std::nullptr_t类型的prvalue可以转换为bool类型的prvalue;结果值为false


    我想你的问题真的是:“bool()的值是多少?”,从上所示的代码中可以明显看出。的可能重复