タグ

cppとtipsに関するkiyo_hikoのブックマーク (16)

  • ProjectCoder: CSV の仕様と扱いやすい CSV について考える

    kiyo_hiko
    kiyo_hiko 2016/03/01
    "CSV の C は本来は Comma のことですが最近は Character のことだと解釈されるのでカンマの代わりにタブを使うというのはおかしな話ではありません。" // C++だとTSVで楽できるかもという話
  • C3(Composite Computer Club) » C++ の if や while, for をカンマでデコってちょっぴり関数型言語風!?小悪魔カワイイコーディングで今夏を先取りしちゃお☆

    C++ の if や while, for をカンマでデコってちょっぴり関数型言語風!?小悪魔カワイイコーディングで今夏を先取りしちゃお☆ こんにちわ、みなさんが好きなプログラミング言語といえば C++ ですね。ぼくはまだまだ修行が足りないので C++ 愛は東京ドーム1個分くらいしかないのですが、今日はそんなみなさんのご要望にお応えして大人気の C++ の話を書きます。 C++ は C とは大きく異なり関数の先頭だけでなく、レキシカルスコープ内の好きなところで変数を宣言することができます。スコープの中で必要な時に局所的に変数を宣言できるのでとても便利です。例えば for 文の初期化ステートメントの中で変数を定義して初期化することもできます。 // ANSI-C int i = 0; for ( i = 0; i < 5; ++i ) { } // C++ for ( int i = 0;

    kiyo_hiko
    kiyo_hiko 2015/05/13
    "C でも C99 であれば C++ と同じように書くことができます。最近の C は以前よりもかっこよくなってるみたいです"
  • if文の中のカンマ - 揮発性のメモ2

    int a=1; if( a==0, a==1 ) printf("Hello\n"); if文かどうかはあまり関係ない。 カンマ区切りは、左から順に実行(評価)してって、値としては一番右のを採用する。

    if文の中のカンマ - 揮発性のメモ2
    kiyo_hiko
    kiyo_hiko 2015/05/13
    きわめて有用そうな記法
  • C++の4つのキャストを使いこなす

    イントロダクション C++ には全部で4種類のキャストがあります。これらの使い方をしっかり確認しておこうというのが今回の主旨です。いきなり題に入ってもいいのですが、まずは C 言語のキャストをおさらいしてみましょう。 (type-name) cast-expression C のキャストにはこの1つの形式しかありません。ややこしいですね。1つしかないのに何がややこしいかって?見た目は1つの形式しかないのに実際の動作は何通りもあるのがややこしいんです。ざっと考えただけでも次の3つの使い方が思い浮かびました。 float average(const int* array, int size); int n = (int) average(array, size); void * get_data(int nID); char * p = (char *) get_data(2); int g

    kiyo_hiko
    kiyo_hiko 2012/11/02
    typeid - 「この演算子は const type_info& を返します。type_info クラスには operator== が定義されているので、これで実行時に型を判別できます」
  • C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人

    追記(2015/04/19): 後置を使うべきという意見もあるようです -> 前置インクリメント vs 後置インクリメント | 闇夜のC++ C++を勉強し始めるまでは特に必要がない限り、値をインクリメントする際は前置ではなく、後置でやっているのを見かけるのが多かったのですが、C++や解説サイトを見ると、インクリメントが後置ではなく、前置になっているのをよく見かけます。 昨日まで単にC++のスタイル的な問題なんだろうと思っていたのですが、どうやらもっとちゃんとした理由があるようです。 某IRCで話を振ったら、友達が教えてくれました。 前置インクリメントと後置インクリメント まず、インクリメントを使った例としてfor文によるループを考えてみます。 C言語で書くと例えば以下のようになります。 for (i=0;i<n;i++) { ... } C++でも同じように書けます。 for (i=

    C++で後置インクリメントよりも前置インクリメントが多用される理由 - 考える人、コードを書く人
  • C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ

    (追記あり/再追記あり) ブクマ経由で、C++で演算子オーバーロードしたときの演算子決定基準について調べたというのを見たのだけど、書いてあるサンプルコードが演算子オーバーロード以前にちょっとダメだった。 昔書いたテストコードと書いてあるので、今は分かってるのかもしれないけど、ある程度経験を積んだC++プログラマは絶対に(というのは言いすぎでした)virtualデストラクタのないクラスを継承しない(追記やTBやブコメの議論を参照のこと)ので、このサンプルコードを載せて違和感を感じない時点で、演算子オーバーロードをいじるよりもまずはEffective C++を読んだ方がよい。 何がダメか。以下のように、virtualデストラクタがないクラスを継承している。これはダメだ。例え基底クラスのデストラクタですべきことがないのだとしても、継承するつもりのあるクラスにはvirtualデストラクタを作らない

    C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ
    kiyo_hiko
    kiyo_hiko 2012/10/03
    「C++では、virtualデストラクタのないクラスは継承するつもりのないクラス(Javaでいうfinalクラス)であると考えた方がよい」
  • プログラミング/小ネタ集/Unicode対応コーディング - ルーチェ's Homepage

    概要 † このコンテンツは、C/C++言語でWindowsプログラミングをしていて、かつMFCやATLにある CString クラスを使っていない人くらいにしか実益はないかもしれません。 が、内容的に知っておいて損はないことなので書いておきます。 概要としては、 LPTSTR 型や TCHAR 型について知り、NT系(Unicode環境)と9x系(非Unicode環境)のどちらにも最適化できるソースコードを書こうというお話です。 TCHAR 型を見たことがなくても、 LPTSTR 型なら見たことがある人も結構いるでしょう。 初心〜中級のWindowsプログラマは、大抵は LPTSTR 型と LPSTR 型の違いを特に意識せずにコードを書いています。 しかし、この二つの型を混同するのは非常に危険なことです。 まずはこれらの型の定義を説明し、 TCHAR 型を用いることでUnicode対応プロ

    kiyo_hiko
    kiyo_hiko 2012/09/24
    DLLの場合TCHARや派生した型は使えないので、"FunA(LPCSTR s)"と"FunW(LPCWSTR s)"みたいにしてヘッダーにマクロ書いて使い分けるとの話
  • DWORDの実際の型は何でしょうか - OKWAVE

    VC++.NETの環境です。 DOWRD dw1 = 1; int i = 2; と定義し ここで if ( i > dw1 ){ 何かの処理; } とコーディングすると warning C4018: '>' : signed と unsigned の数値を比較しようとしました。 のワーニングがでます。 これは、DWORDがint型でなくunsigned int型のようにも見えます。 あるによれば(VC++.V.NET逆引き大全500の極意) DWORD はint型であると記述されています。 もし、int型ならこのワーニングはでないはずなのですが、 なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

    DWORDの実際の型は何でしょうか - OKWAVE
    kiyo_hiko
    kiyo_hiko 2012/09/21
    windef.hを見るか、型の上で右クリックして「定義に移動」
  • JSでi++と++iどっちが速い? - Islands in the byte stream (legacy)

    結論から言うと、現在のChromeのみをターゲットにして最適化するという特殊なケースを除き*1、どちらでも変わらないといえます。 [追記] 指摘を受けて再考してみました。そもそもjsperfでは初期化コード(今回はdataなどの初期化に使用)は一度しか走らないにもかかわらず、このベンチマークコードではdataの中身を書き換えています。これがスコアに影響を与えていたようです。 data[index] = data[index] * 2をdata[index] = index * c にした結果はChromeでも安定して双方有意差なしという結果になりました。 http://jsperf.com/postfix-or-pretfix-increment/4 JSのベンチマークの難しさを思い知りました。 [/追記] http://jsperf.com/prefix-or-postfix-incre

    JSでi++と++iどっちが速い? - Islands in the byte stream (legacy)
  • 条件演算子 - Wikipedia

    条件演算子(じょうけんえんざんし、英: conditional operator)は、プログラミング言語の演算子で、条件文と同様な意味があるが、文ではなく値を持つ式になる。評価されると、条件式の値により異なる式が評価され、異なる値になる。 なお、C言語やC++など一部のプログラミング言語において、条件演算子とは後述する「? :」(ハテナマークとコロン) の演算子の名称である。 「If 〜 Then 〜 Else 〜」にあたる三項演算子があり、ほぼ唯一の、プログラミング言語において一般的な三項演算子である。また「If 〜 Then 〜 if」にあたる二項演算子もある。 三項演算子は、条件式・真式・偽式の3つのオペランドを結ぶ。二項演算子の場合は、条件式と、真式または偽式のいずれかの、2つのオペランドを結ぶ。 条件文との違いは、 真式・偽式は式(条件文における節のように文を置くことができない)

    kiyo_hiko
    kiyo_hiko 2012/02/15
    「CやJavaやPerlなどでは、a ? b : c ? d : e は a ? b : (c ? d : e) という意味だが、PHPの三項演算子では (a ? b : c) ? d : e なので注意が必要である」…なぬ。自分は条件演算子をcondやCASE代わりに多用するので、これは気を付けないと
  • sizeofオペレータを正しく使おう ――C/C++セキュアコーディング入門(5)

    はじめに 今回はsizeofオペレータをとりあげます。sizeofは、引数に与えたオブジェクトや型名から、その型のデータがメモリ上に占めるバイト数を求めるオペレータです。皆さんも、メモリ領域を動的に確保したいときや文字列操作などに関連して使ったことがあるでしょう。まずはsizeofオペレータの使用上の注意について説明し、その後でsizeofオペレータの誤用例を2つ紹介します。 sizeofオペレータ使用上の注意 「sizeofオペレータの使用上の注意 その1」は、プログラマが意図する正しい引数を渡すこと、です。メモリ上のオブジェクトのコピーや移動などの操作は、オブジェクトのメモリ上のサイズにもとづいて行います。オブジェクトのサイズを間違っていたら、アクセス違反やオーバフローといった脆弱性につながることは容易に想像できるでしょう。 「sizeofオペレータの使用上の注意 その2」は、引数に副

    sizeofオペレータを正しく使おう ――C/C++セキュアコーディング入門(5)
    kiyo_hiko
    kiyo_hiko 2012/02/07
    「引数に副作用を持つような式を渡さないこと」…例えばsizeof(a++)はだめという話
  • (C++0x)可変長テンプレート引数は再帰でおいしくいただきましょう | さかな前線

    C++0xで導入される可変長テンプレート引数,便利ですね. 僕は静的なのが大好きなので. 可変長テンプレート引数の何がおいしいかというと,例えば現在のboost::tupleはT0からT9までをデフォルトテンプレート引数と組み合わせて実装してるので要素数は10以下に限定されますが,C++0xに用意されるstd::tupleは可変長テンプレート引数で実装されるので,原理的には,無限の要素数が実現できます. ここで質的に重要なのは,「無限の要素数」に対応できることではなく,「任意の要素数nにおいて一般的に記述できる」ことである点に注意. また,可変長テンプレート引数を用いて,可変長引数の関数を書けます. これは,いわば「型安全printf」を書けることを意味します. 話がちょっと逸れましたが,じゃあその可変長テンプレート引数は実際どういう風に扱うの?という話を,関数テンプレートに関してします

  • 请稍候正在打开.....

  • MSN Japan - ニュース, 天気, メール (Outlook, Hotmail), Bing検索, Skype

    kiyo_hiko
    kiyo_hiko 2012/02/01
    これは確かにC/CPPをまじめに始めてからちょっと疑問だった。static変数も参照可能なスコープが限定されるという意味でローカル変数であるから、自動変数はローカル変数の部分集合である、とのこと。なるほど。
  • C++で開発

    [ Home on 246net ] C++で開発 好むと好まざるとに関わらず、C++言語を使った開発をすることになったときに調べたことの蓄積。 言語仕様 ブートストラップ main関数 main関数について パッケージ管理 名前空間 名前空間の使用 ヘッダファイル ヘッダファイルとは インクルードガード ヘッダファイルの依存性をなくすには 文法要素 プリプロセッサ 条件コンパイル 可変引数を取る関数(stdargs他) 定義済みマクロ 型 組み込み型 標準定義型(標準typedef等) ビットサイズ固定整数型、 typedefの注意 クラス コンストラクタ メンバー変数 演算子関数 ビットフィールド 継承 例外 標準例外 例外処理のプログラミング テンプレート メンバ関数の特殊化 デバッグ アサーション ANSI Cのassert VC++固有のassert コーディング標準 公知のコー

  • 1