我有计算单词的代码:
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 ++中使用它,那么使用像我这样的代码是否安全?
答案 0 :(得分:1)
根据C ++标准对operator []
类std::map
效果:如果地图中没有等效于x的键,则插入 value_type(x,T())进入地图。
所以这句话
counts[word]+=1;
因此counts[word]
的值最初将等于0.
如果您的意思是VC ++的MS的一些错误,那么您应该参考微软网站中的错误描述。我不知道MS VC ++的这个错误。这将是一个非常严重的错误,我怀疑它存在。
因此可以安全地与任何编译器一起使用。这种类型的错误不会长久。:)