- 论坛徽章:
- 9
|
如- std::map<int, int> n;
- n[4] += 6;
复制代码 当n[4]最初不存在的时候,n[4] += 6以后是否一定是6,也就是说n[4]自动插入的时候,是否一定是0。
查看map的源码,当n[4]不存在的时候会执行insert(_Where, value_type(_Keyval, mapped_type())),而此时mapped_type相当于int。
也就是说int i = int(),是否有C++标准保证i一定是0。
我查了下,与此相关的资料,发现这种情况属于POD(plain old data),但是没有找到具体解释POD类型性质的资料。就测试而言,我在VS和GCC上都测试过int i = int()这种写法,发现i确实被置0了(观察汇编代码确实有置0的动作,而非巧合),但是找不到确切说明这个情况的C++标准文字内容。
另外即使int i = int()有标准保证其一定是0,那么是否标准保证n[4]在4不存在时也一定是0呢?因为有可能其相关代码是这样的:- mapped_type xxx;
- insert(_Where, value_type(_Keyval, xxx))
复制代码 这样就一定不能保证n[4]一定是0了。
请求确认相关标准文档,非常感谢!!!
|
|