たまのCはビタミンが足りない


void function(std::vector a) { 
    for (int i = 0; i < a.size() - 1; i++) { 
       // 処理  
         yabee(a.at(i)); 
    } 
} 

上のはやばい感じです。
はまりますた。
正しくは多分下。


for (int i = 0; i + 1 < a.size(); i++) { 
    // 処理 
    yabee(a.at(i)); 
} 

a.size()-1はsize()がsize_tなので-1にならない感じです。

キーワード:
C++,unsigned,オーバーフロー

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C言語 パーマリンク

たまのCはビタミンが足りない への3件のフィードバック

  1. o-taki のコメント:

    for ( int  i = 0; …
    じゃなくて
    for ( size_t   i = 0; …
    ってしたらいいんじゃね?

  2. コスミー のコメント:

    i < a.size() – 1;
    と書いてしまうと、a.size()==0のとき、a.size()-1がsize_tのためおそらく
    i < (size_t)(-1)
    で、a.size()==0なのにループの中に入る感じです。

  3. o-taki のコメント:

    ああ、site_t は unsigned だから -1 にならないということですか。なるほど。
    よくわかりました。

コメントを残す

メールアドレスが公開されることはありません。