タグ

c++に関するnilabのブックマーク (204)

  • コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog

    これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We

    コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog
    nilab
    nilab 2019/06/01
    コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog
  • NULL と nullptr って何が違う? - Qiita

    C++11 では、NULL に代わるものとして nullptr キーワードが追加されています。 この話を聞くと「NULL じゃだめなの?」と一度は思う人は少なく無いと思います。 そこで、今回は NULL と nullptr の違いについて書いてみたいと思います。 NULL じゃ出来ないことがある 今更言うことでもないですが、NULL は以下のようにマクロで定義されています。

    NULL と nullptr って何が違う? - Qiita
    nilab
    nilab 2019/05/30
    「C++11 では、NULL に代わるものとして nullptr キーワードが追加されています」
  • More C++ Idioms/インクルードガードマクロ(Include Guard Macro) - Wikibooks

    [編集] 意図[編集] 複数回ヘッダファイルをインクルードすることを防止する。 別名[編集] 動機[編集] 同一のヘッダファイルを同じ翻訳単位にインクルードすることは問題となる。 なぜなら、C++ の基規則である単一定義規則(One Definition Rule(ODR))に違反するからである。 ヘッダファイルは直接あるいは間接的なインクルードによって複数回インクルードされるかもしれない。 解法とサンプルコード[編集] インクルードガードマクロ(Include Guard Macro)イディオムは C でも適用可能な古いイディオムである。 ある翻訳単位で複数回ヘッダファイルをインクルードすることを防ぐために、単純な #define を使う。 以下のようなマクロを、ヘッダファイルの先頭と末尾に置く(訳註:__ で開始する名前は実装に予約されている)。 #ifndef __MYHEADER

    nilab
    nilab 2019/05/30
    「インクルードガードマクロ(Include Guard Macro)イディオムは C でも適用可能な古いイディオムである。 ある翻訳単位で複数回ヘッダファイルをインクルードすることを防ぐために、単純な #define を使う」
  • インクルードガード

    [ C++で開発 ] インクルードガード 少し込み入ったプログラムを開発していると、ヘッダファイルを2重にincludeしてしまい、コンパイルエラーとなることがあります。ここでは、その回避方法として使われる内部インクルードガードと、include処理時間を大幅に削減しコンパイル時間を短くする冗長インクルードガードの2つを取り上げます。 (追加)最近のGCCでは#pragma onceも無警告で使用できるようになっているようです。 インクルードガードの必要性 2重インクルードの発生 まず、2重インクルードが発生する例を見てみます。

    nilab
    nilab 2019/05/30
    「少し込み入ったプログラムを開発していると、ヘッダファイルを2重にincludeしてしまい、コンパイルエラーとなることがあります」「回避方法として使われる内部インクルードガード」
  • 植山 類 - 仕事を説明するときに「Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っ...

    仕事を説明するときに「Google仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」というと、???という反応になることが多いので、こういう仕事をしているんだよということをちょっと説明してみます。...

    植山 類 - 仕事を説明するときに「Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っ...
    nilab
    nilab 2016/04/18
    「仕事を説明するときに「Googleで仕事をしているけどオープンソースなのでGoogleのプロダクトを作っているわけではないし、むしろアップルとかソニーの人と一緒に仕事している」というと、???という反応になる……」
  • 速いしスケールする並列CSVパーサ作った紆余曲折話 - 俺とお前とlaysakura

    この記事は↓に移転しました。 laysakura.github.io

    速いしスケールする並列CSVパーサ作った紆余曲折話 - 俺とお前とlaysakura
    nilab
    nilab 2014/12/31
    速いしスケールする並列CSVパーサ作った紆余曲折話 - 俺とお前とlaysakura
  • スレッドセーフという幻想と現実 - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2013の15日目にエントリしています。 内容はC++標準ライブラリとスレッドセーフに関する解説になります。 flickr / rennasverden もくじ What's スレッドセーフ? スレッドセーフという幻想 基型とデータ競合 C++標準ライブラリとデータ競合 C++標準ライブラリ:シーケンスコンテナ編 C++標準ライブラリ:連想コンテナ編 スレッドセーフ RELOADED 基的なスレッドセーフ保証 std::shared_ptr<T> std::rand() std::cout (文のみ約9000字) はじめに マルチスレッド対応の点では他言語に遅れを取っていたプログラミング言語C++ですが、C++11ではようやく標準ライブラリにスレッドサポートが追加されました。C++11スレッドサポートではスレッドクラスstd::thr

    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
    nilab
    nilab 2014/12/21
    スレッドセーフという幻想と現実 - yohhoyの日記(別館)
  • メモリモデル?なにそれ?おいしいの? - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2014の21日目にエントリしています。 内容はC++メモリモデルと逐次一貫性についての概説記事となっています。 flickr / nomadic_lass もくじ 忙しい人のための「C++メモリモデル」 C++メモリモデル一問一答 ソフトウェアからみた「C++メモリモデル」 “メモリ”という共有リソース C++ソースコードが実行されるまで メモリの一貫性と整合性 逐次一貫性モデル is Easy ハードウェアからみた「C++メモリモデル」 ハードウェア・メモリ一貫性モデル C++コンパイラの責任と自由 強いメモリモデル vs. 弱いメモリモデル 逐次一貫性モデル is Hard (文のみ約9600字) まえがき When your hammer is C++, everything begins to look like a thumb

    メモリモデル?なにそれ?おいしいの? - yohhoyの日記(別館)
    nilab
    nilab 2014/12/21
    メモリモデル?なにそれ?おいしいの? - yohhoyの日記(別館)
  • GitHub - kazuho/picojson: a header-file-only, JSON parser serializer in C++

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - kazuho/picojson: a header-file-only, JSON parser serializer in C++
    nilab
    nilab 2013/11/07
    kazuho/picojson · GitHub : PicoJSON is a tiny JSON parser / serializer for C++
  • partake.in

    This domain may be for sale!

    nilab
    nilab 2013/10/29
    2013年11月2日(土) 13:00 大阪産業創造館6F 会議室D 住所: 大阪市中央区本町1-4-5 / C++例外安全Day - PARTAKE
  • googletest - Google C++ Testing Framework - Google Project Hosting

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    googletest - Google C++ Testing Framework - Google Project Hosting
    nilab
    nilab 2013/09/15
    googletest - Google C++ Testing Framework - Google Project Hosting : "Google's framework for writing C++ tests on a variety of platforms (Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian). Based on the xUnit architecture."
  • 文字列操作

    文字列比較 // s1 と s2 を func で処理し比較した結果を戻す const int xcompare(const std::string& s1, const std::string& s2, int (*func)(int num)=toupper) { assert(s1.size()==s2.size()); // s1 と s2 の長さは同じなはず int result=0; std::string::const_iterator it1(s1.begin()); std::string::const_iterator it2(s2.begin()); const std::string::const_iterator end1(s1.end()); const std::string::const_iterator end2(s2.end()); for( ; it1

    nilab
    nilab 2013/09/14
    文字列操作
  • C3(Composite Computer Club) » C++のプリミティブ型がとりうる最大値を取得する。

    C++のプリミティブ型がとりうる最大値を取得する。 こんばんわ!もう早いもので春の匂いがあちらこちらでしますね。お花見も目前に迫ってきています。 C/C++ではint やchar、floatに double とプリミティブ型(あるいはfundamental types)がとりうる範囲が<limits.h> (C++だと<climits>)の中で定義されています。次のコードは<limits.h> の中で定義されたマクロ定数 INT_MAX, LONG_MAX を表示するプログラムです。 #include <iostream> #include <limits.h> //C++だと<climits> int main() { std::cout << INT_MAX << std::endl //2147483647 << LONG_MAX << std::endl; //2147483647

    nilab
    nilab 2013/01/10
    C3(Composite Computer Club) » C++のプリミティブ型がとりうる最大値を取得する。 : 「ちなみに32bit 環境のVisual Studio 2010 による実装だと、std::numeric_limits<std::int32_t>::max() はINT_MAX の値を返しているようです」
  • エラーになるのは何故?(デフォルトコンストラクタの合成) - C++ をクイズ形式で勉強

    コード(1) // main.cpp struct A { A (int a) { } }; int main() { A a; } コンパイルエラー $ g++ main.cpp main.cpp: In function 'int main()': main.cpp:12: error: no matching function for call to 'A::A()' main.cpp:5: note: candidates are: A::A(int) main.cpp:4: note: A::A(const A&) コード(2) // main.cpp struct A { A (int a) { } }; struct B { A a; }; int main() { B b; } コンパイルエラー $ g++ main.cpp main.cpp: In constructor

    エラーになるのは何故?(デフォルトコンストラクタの合成) - C++ をクイズ形式で勉強
    nilab
    nilab 2013/01/10
    エラーになるのは何故?(デフォルトコンストラクタの合成) - C++ をクイズ形式で勉強
  • エラーになるのは何故?(デフォルトコンストラクタの呼び出し) - C++ をクイズ形式で勉強

    コード(1) // main.cpp struct A { A(int a) { } }; int main() { A a; } コンパイルエラー $ g++ main.cpp main.cpp: In function 'int main()': main.cpp:12: error: no matching function for call to 'A::A()' main.cpp:5: note: candidates are: A::A(int) main.cpp:4: note: A::A(const A&) コード(2) // main.cpp struct A { A(int a) { } }; int main() { A* a = new A[10]; delete[] a; } コンパイルエラー $ g++ main.cpp main.cpp: In functio

    エラーになるのは何故?(デフォルトコンストラクタの呼び出し) - C++ をクイズ形式で勉強
    nilab
    nilab 2013/01/10
    エラーになるのは何故?(デフォルトコンストラクタの呼び出し) - C++ をクイズ形式で勉強 : "note: candidates are"
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    nilab
    nilab 2012/12/26
    コンテナに複数の並び順を持たせる - boostjp : 「mapとして使いたいけど挿入順も覚えておきたい」「mapに、値からキーを検索する機能がほしい」Boost Multi-Index Library : boost::multi_index_container
  • メールでデータベースを更新するココロミ ~C++での即興実装

    今回のお題 先日引き受けた相談事は「メールを使ってデータベースにレコードを登録したい」とのこと。レコードを文としたメールを投げて、そいつがデータベースに格納されるカラクリが欲しいってんですね。例えば売上データやらアンケート結果やら、あちこちで収集したデータをメールでかき集めるのが目的なのでしょう。「そんなもん、どこぞにWeb-serviceをホストしておいてHTTPで投げればいぃんじゃね?」と答えたところ、できるだけチープに実現したく、サーバ立てるのは避けたいそうな。 なるほど、そう言うことなら納得です。テキトーなメールアカウントを1つ用意し、みんなが寄ってたかってそいつめがけてメールを投げつけ、小さなアプリケーションがメールを読んでデータベースに流し込むってスンポーですか。「登録したいレコードって定型なの? どれも同じフォーマットなら実装楽なんだけど」と訊くと依頼主曰く「いや、ゆくゆく

    メールでデータベースを更新するココロミ ~C++での即興実装
    nilab
    nilab 2012/08/28
    メールでデータベースを更新するココロミ ~C++での即興実装 (1/4):CodeZine : POP3, Boost.Asio, XML, Apache Xerces, ICU, SQLite
  • Effective STL 11

    Effective STL 11

    Effective STL 11
    nilab
    nilab 2012/07/17
    Effective STL 11 - Google ドキュメント
  • newした配列のサイズ - Faith and Brave - C++で遊ぼう

    newした配列は最後にdelete[]を使って解放するわけですが、「何個解放するか」は誰が知ってるのか。 コンパイラによって異なると思いますが、GCC 4.6では先頭要素の1つ前にサイズが入ってました。 #include <iostream> struct X { X() { std::cout << "ctor" << std::endl; } ~X() { std::cout << "dtor" << std::endl; } }; int main() { const std::size_t n = 3; X* xs = new X[n]; std::cout << *(reinterpret_cast<std::size_t*>(xs) - 1) << std::endl; delete[] xs; } ctor ctor ctor 3 dtor dtor dtorただし、デストラ

    newした配列のサイズ - Faith and Brave - C++で遊ぼう
    nilab
    nilab 2012/05/25
    newした配列のサイズ - Faith and Brave - C++で遊ぼう : 「newした配列は最後にdelete[]を使って解放するわけですが、「何個解放するか」は誰が知ってるのか」「GCC 4.6では先頭要素の1つ前にサイズが入ってました」
  • 値渡しか、参照渡しか

    スタックオーバーフロー 値渡しでは、関数を呼び出すたびに、引数に渡したデータがコピーされ、スタックに積まれます。そのため、サイズの大きいデータを値渡しで渡していると、実行時にスタックが溢れてしまうことがあります。これは、C言語でもC++言語でも同様です。 コピーによるオーバーヘッド 値渡しでは、関数を呼び出すたびに、引数に渡したインスタンスのコピーが発生します。このオーバーヘッドのために、参照渡しに比べて、パフォーマンスが悪くなります。 C言語でも、サイズの大きい構造体は参照渡しとして、パフォーマンスの悪化を防ぐ、という指針が知られています。C++言語の場合は、データサイズの他に、データの複雑さも影響してきます。というのも、インスタンスのコピーが行われる際に、コピーコンストラクタが呼び出されるためです。 複雑な構造を持つクラスであれば、コピーコンストラクタに複雑なコピー処理が実装されている

    nilab
    nilab 2012/05/10
    値渡しか、参照渡しか