これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、EffectiveC++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We
同一のヘッダファイルを同じ翻訳単位にインクルードすることは問題となる。 なぜなら、C++ の基本規則である単一定義規則(One Definition Rule(ODR))に違反するからである。 ヘッダファイルは直接あるいは間接的なインクルードによって複数回インクルードされるかもしれない。 インクルードガードマクロ(Include GuardMacro)イディオムは C でも適用可能な古いイディオムである。 ある翻訳単位で複数回ヘッダファイルをインクルードすることを防ぐために、単純な #define を使う。 以下のようなマクロを、ヘッダファイルの先頭と末尾に置く(訳註:__ で開始する名前は実装に予約されている)。
[C++で開発 ] インクルードガード 少し込み入ったプログラムを開発していると、ヘッダファイルを2重にincludeしてしまい、コンパイルエラーとなることがあります。ここでは、その回避方法として使われる内部インクルードガードと、include処理時間を大幅に削減しコンパイル時間を短くする冗長インクルードガードの2つを取り上げます。 (追加)最近のGCCでは#pragma onceも無警告で使用できるようになっているようです。 インクルードガードの必要性 2重インクルードの発生 まず、2重インクルードが発生する例を見てみます。
この記事は↓に移転しました。 laysakura.github.io
この記事は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

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

HALOBET : Situs Slot Gacor Resmi & Link Alternatif Mudah Maxwin HALOBET sebagai situs slot gacor resmi memberikan akses mudah bagi pemain melalui link alternatif yang selalu aktif dan aman digunakan. Di platform ini, pemain dapat menikmati berbagai pilihan judi slot online dengan peluang slot maxwin yang tinggi setiap hari. Selain menawarkan pengalaman bermain yang stabil.


文字列比較 // 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_iteratorit1(s1.begin()); std::string::const_iteratorit2(s2.begin()); const std::string::const_iterator end1(s1.end()); const std::string::const_iterator end2(s2.end()); for( ;it1
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
コード(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
コード(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
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
今回のお題 先日引き受けた相談事は「メールを使ってデータベースにレコードを登録したい」とのこと。レコードを本文としたメールを投げて、そいつがデータベースに格納されるカラクリが欲しいってんですね。例えば売上データやらアンケート結果やら、あちこちで収集したデータをメールでかき集めるのが目的なのでしょう。「そんなもん、どこぞにWeb-serviceをホストしておいてHTTPで投げればいぃんじゃね?」と答えたところ、できるだけチープに実現したく、サーバ立てるのは避けたいそうな。 なるほど、そう言うことなら納得です。テキトーなメールアカウントを1つ用意し、みんなが寄ってたかってそいつめがけてメールを投げつけ、小さなアプリケーションがメールを読んでデータベースに流し込むってスンポーですか。「登録したいレコードって定型なの? どれも同じフォーマットなら実装楽なんだけど」と訊くと依頼主曰く「いや、ゆくゆく

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ただし、デストラ
スタックオーバーフロー 値渡しでは、関数を呼び出すたびに、引数に渡したデータがコピーされ、スタックに積まれます。そのため、サイズの大きいデータを値渡しで渡していると、実行時にスタックが溢れてしまうことがあります。これは、C言語でもC++言語でも同様です。 コピーによるオーバーヘッド 値渡しでは、関数を呼び出すたびに、引数に渡したインスタンスのコピーが発生します。このオーバーヘッドのために、参照渡しに比べて、パフォーマンスが悪くなります。 C言語でも、サイズの大きい構造体は参照渡しとして、パフォーマンスの悪化を防ぐ、という指針が知られています。C++言語の場合は、データサイズの他に、データの複雑さも影響してきます。というのも、インスタンスのコピーが行われる際に、コピーコンストラクタが呼び出されるためです。 複雑な構造を持つクラスであれば、コピーコンストラクタに複雑なコピー処理が実装されている
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く