没有事先初始化,使用map subscription运算符的结果是否安全?

时间:2015-06-22 16:09:04

标签: c++ dictionary stl

我有计算单词的代码:

std::map<std::string,int> counts;
std::string word;

while(cin>>word) 
{ 
   counts[word]+=1; //????
}

安全吗? AFAIK,为[以前看不见的密钥]计算[word],将创建&#34;值初始化&#34;值。 &#34;值初始化的&#34;是&#34;零初始化&#34;对于POD类型。因此,看起来很安全。

但是,在某些情况下,有一些关于Visual Studio中实现值初始化的错误的信息(我不了解细节)。

所以,我的问题是:如果我想在g ++和Visual C ++中使用它,那么使用像我这样的代码是否安全?

1 个答案:

答案 0 :(得分:1)

根据C ++标准对operator []std::map

的描述
  

效果:如果地图中没有等效于x的键,则插入   value_type(x,T())进入地图。

所以这句话

counts[word]+=1;

因此counts[word]的值最初将等于0.

如果您的意思是VC ++的MS的一些错误,那么您应该参考微软网站中的错误描述。我不知道MS VC ++的这个错误。这将是一个非常严重的错误,我怀疑它存在。

因此可以安全地与任何编译器一起使用。这种类型的错误不会长久。:)