egtra egtra 2012-08-16 22:32:49

[C++] 空っぽの場合 このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

要素数が0のときのことを忘れちゃった、というありがちなミスです。Visual C++のようなチェックが厳しいものだとv[0]で死にました。なので、char const* p = v.empty() ? NULL : &v[0]などと直していました。

今だとchar const* p = v.data();と書けばこの問題ともおさらばできるいい時代になりました。

void f(std::vector<char> const& v)
{
    char const* p = &v[0];

    // ……
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(2)

#1 customX_156 customX_156 2012-08-17 03:00:04  

理想を言えば new char[0]; や struct {} hoge; がアドレスを持つのと同じく、v.size() == 0 でも v[0] はアドレスを持つべきだと思うので、ウンコといえるほどひどいコードとは思えないなぁ。

#2 utubyou009 utubyou009 2017-08-03 03:35:33  

これが怖いので、[]演算子よりat()をメンバ関数を使ってる。効率がシビアに効いてくる場面ではだめだろうが。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[その他] HOW TO ABC..

このエントリーをはてなブックマークに追加

実際にあった某システムの超重要なマスター...

create table item_master (
 A varchar(2...

鑑賞する »

[JavaScript] documentオブジェクトの魔法

このエントリーをはてなブックマークに追加

javascriptが悪いのかhtmlが...

<form name="getElementById"></form>

鑑賞する »

[JavaScript] とっても長いswitch/case文

このエントリーをはてなブックマークに追加

配列変数を全く理解できていなかった。

var rnd = Math.floor(Math.random() * 128...

鑑賞する »