タグ

C++と解説に関するiwwのブックマーク (19)

  • 'コピー | Programming Place Plus C++編【言語解説】 第17章'

    C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 -> C++23 と更新されています。 なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

    'コピー | Programming Place Plus C++編【言語解説】 第17章'
  • C++ Debugging for the ESP32 in Visual Studio - YouTube

  • gdbでポリモーフィズムにおける実際のクラス情報を取得する - Qiita

    結論 C++をgdbでデバッグする時(特にポリモーフィズム使ってる場合)は、下記の設定をするとわかりやすいです。 gdb manual 背景 C++でポリモーフィズムすると、デバッグ時に実際のクラスがぱっと見わからなくて困ることがあります。 例として、以下のようなプログラムを考えます。 Animalクラスを基底クラスとして、そこから継承したクラスをいくつか定義しています。 それらのインスタンスへのポインタをstd::vectorでまとめて、 Chorus関数にてポリモーフィズムを使ったMakeSound呼出をしています。 #include <iostream> #include <memory> #include <vector> class Animal { public: virtual ~Animal() {} virtual void MakeSound() const { std

    gdbでポリモーフィズムにおける実際のクラス情報を取得する - Qiita
  • valgrindが検出するメモリリークの種類 - wagavulin's blog

    C/C++のメモリリークチェックツールと言えばvalgrindが有名だが、メッセージの詳細を日語で説明しているサイトはあまりないようなので調べてみた。 valgrindは、mallocやnewで確保されたメモリ領域がポインタによって辿れるかどうかをチェックすることでメモリリークを検出する。以下の例を見てみよう。 char *g_ptr; void func(){ char *p = new char[32]; // (A) } int main(){ func(); } main関数から始まり、そこからfuncが呼ばれ、現在 (A) の位置にいるとしよう。このとき、メモリ上にはmain関数とfunc関数で定義された変数があり、また、グローバル変数であるg_ptrも有効な状態で存在している。func関数が抜けると変数pは無効になる。 このpやg_ptrのようなデータのことをroot-set

    valgrindが検出するメモリリークの種類 - wagavulin's blog
    iww
    iww 2018/10/11
    『valgrindは、mallocやnewで確保されたメモリ領域がポインタによって辿れるかどうかをチェックすることでメモリリークを検出する。』 そういう原理だったのか
  • とても賢いコンパイラーの逆襲

    The Hacks of Life: The Dangers of Super Smart Compilers Clangの最適化が未定義の挙動を検出してコード片を消し去ってしまったことに引っかかった開発者の嘆き。 今日初めて、RenderFarmのDSF render(global scenaryを作成するのに使っている内部ツール)をClangで最適化コンパイルして実行した。 結果はsegfaultだった。これは驚きだ(そして自身消失だ)。というのも、最適化していないデバッグビルドは問題なく動くし、GCCでコンパイルされた最適化ビルドも正しく動く。-O0ではバグがない(つまり#if DEVコードのバグではない)ので、「最適化は何をやっているんだ」の時間だ。 大量のprintfと試行錯誤の結果、最適化は以下のようなコード片を丸ごとすっ飛ばしていることが判明した。 for(vector<me

  • 第四回-03 : コピーコンストラクタ・代入演算子のオーバーロード

    ページでは「コピーコンストラクタ」、 および「代入演算子のオーバーロード」について解説する。 どういう時にコピーコンストラクタや代入演算子の記述が必要になるのかであるが、 「第二回-05 : オブジェクトの代入」や 「第三回-03 : 関数の戻り値」で既に学んだように、 メンバ変数としてポインタをもつクラスにおいて代入などを行う際に必要になるのであった。 まずこのページを学ぶまえに以前のページをしっかり復習しておくこと。 コピーコンストラクタ・代入演算子の呼ばれるタイミング まず、コピーコンストラクタと代入演算子がどのようなタイミングで呼ばれるのかを簡単に解説しておこう。 int main(){ samp x; // (1) samp y=x; // (2) samp z; z = x; // (3) // 以下、なんらかの処理 } 上記の例を見てみよう。この例は main 関数内で s

    第四回-03 : コピーコンストラクタ・代入演算子のオーバーロード
    iww
    iww 2015/08/05
  • 右辺値参照とムーブセマンティクス - 株式会社CFlatの明後日スタイルのブログ

    資料だけならWeb上に多かれど、いまいちピンとこないのがこの2つの機能ではないかと思います。大体この2つはセットにして語られるので、どこからどこまでが右辺値参照の機能でどこからどこまでがムーブセマンティクスの機能なのかを混同してしまう、ということも理解の混乱に拍車をかけている気がします。私だけかもしれませんが。 ●右辺値参照 そんなわけで明らかにしておきたい事は、つまりはこういうことです。 右辺値参照は、あくまでも「単なる参照」であり、右辺値参照=ムーブコンストラクタを呼びだすための機能、ではない 右辺値参照は、あくまでも「単なる参照」であり、Hoge &&piyo = hoge; とすればHogeのムーブコンストラクタが呼び出される、というわけではない ※ 2013/01/23:faith_and_brave様のご指摘を受けて、表現を変更いたしました。 右辺値参照も、基的にはただの参照

    右辺値参照とムーブセマンティクス - 株式会社CFlatの明後日スタイルのブログ
  • 本当は怖くないムーブセマンティクス - yohhoyの日記(別館)

    この記事はC++ Advent Calendar 2012の15日目にエントリしています。 内容はC++11「ムーブセマンティクス」の入門記事となっています。 もくじ ムーブセマンティクス再考 シンタックス vs. セマンティクス コピー vs. ムーブ ムーブのもつ2つの意味 C++11のムーブセマンティクス対応 auto_ptrからunique_ptrへ auto_ptrの暗い過去 unique_ptrへの移行 std::moveの役割 ムーブセマンティクスを使おう C++11標準ライブラリとムーブ ムーブ"後"の中身は? ムーブを利用して関数を書く (文のみ約9500字) まえがき To move or not to move: that is the question. ― Bjarne Stroustrup, 2010(改)*1 プログラミング言語C++の新しい国際標準規格*2

    本当は怖くないムーブセマンティクス - yohhoyの日記(別館)
    iww
    iww 2015/04/08
    だいぶなんとなくわかってきた。 でも、こういうのこそコンパイラが自動で最適化でなんとかしろよ。 と思った。
  • 1. ガイド — OMakeマニュアル 日本語訳

    1. ガイド¶ あなたがOMakeを始めて使うのであれば、 2. OMakeクイックスタートガイド はどのようにプロジェクトを始めるべきなのかについて、簡単に説明してくれるでしょう。 3. OMakeビルドサンプル ではプロジェクトをビルドするための、より詳細なコードサンプルを紹介しています。そして 4. OMake言語の概要と構文 では実際にプログラミングするときに役立つ、いくつかの一例を紹介しています。 1.1 注意事項¶ OMakeマニュアル 日語訳 v1.3.2 このドキュメントは OMake バージョン0.9.8.6の マニュアル を日語訳したものです。原文のニュアンスを忠実に翻訳するよう心がけていますが、意図しない翻訳ミスやドキュメントの不備があるかもしれません。よって、 内容の正確さについて保証することはできません。 2. クイックスタート OMakeを利用するためのクイ

  • __null ‐ 通信用語の基礎知識

    わざわざ独自定義する以上は、__nullはポインター長の独自の型として振る舞い、int型への代入でエラーになることが期待されるところである。しかし、そのように動くかどうかは、環境による。 32ビット環境では、現実には(int)0と同じ扱いである。 次のコードはエラーにならない。 int i = __null; そして、typeid(__null).name()で__nullの型を調べると、「int」と出力される。32ビット環境では、__nullはint型なのである。 __nullが存在するのは、64ビット環境への対応のためである。64ビット環境では、NULLと0は同一とは限らない。 #include <iostream> int main() { std::cout << "sizeof(NULL) : " << sizeof(NULL) << std::endl; std::cout <

  • 16.2 標準コンテナに基づく構築

    iww
    iww 2012/07/30
  • STL マスター・ノート

    より詳しい解説ノートです。 基的な コンテナ/反復子/関数オブジェクト/アルゴリズム に的を 絞って詳しく解説しています。 stack/queue/priority_queue/bitset/string/rope/valarray/complex については、 また後日、STLプロフェッサー・ノートの方で詳しく解説します。 初歩的な説明は全部とっぱらっていますが、 それでもやっぱり見にくいです。 それから、SGI社のSTLについてはcompose辺りの説明が若干違います。 〔STL-コンテナ〕 ■コンテナ共通の項目 全てのコンテナクラスは、デフォルトコンストラクタ、コピーコンストラクタ、デストラクタを提供する。 また、要素の範囲を指定して初期化を出来る。 ◆コンストラクタによる初期化のサンプル 1) コンテナの要素から初期化をする std::list<int> l ; <省略> std

    iww
    iww 2012/07/28
    とてもわかりやすい良いページ。 でも色がきつい。
  • サルでもわかる 逆引きデザインパターン 第2章 逆引きカタログ ロジック編 Factory/Factory Method(ファクトリ/ファクトリメソッド)

    イントロダクション オブジェクトを利用する側からすれば、使用する際にオブジェクトの詳細を意識したくはありませんよね。 たとえば、条件によってデータファイルの読み込みに使うオブジェクトが異なる場合、CSV形式であればCSVDataReaderオブジェクトを、XML形式であればXMLDataReaderオブジェクトを生成します。 通常はif、else、switchなどの条件分岐を使用して、条件ごとに生成するオブジェクトを変更します。 ここで新たなデータファイル形式への対応が必要になった場合は、新しいオブジェクト生成処理と、条件式を追加しなければいけません。 オブジェクトの使用者は、オブジェクトが使用できる状態で受け渡してもらい、オブジェクトは使うことだけに専念したいものです。 また、このようにオブジェクトの生成処理と使用処理が同じコードに書かれていた場合、オブジェクトの生成処理によってオブジェ

  • Free Dynamic DNS(DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, VPS | MyDNS.JP

    frsw3nr.mydns.jp is not accessible... Sorry. I do not know why this site is not working. If you know Administrator of this site, please contact directly. You may be able to see it in Google cache. For administrator ... MyDNS.JP did not received IP address from you over One week. Please check your notify system. If you restart notification of IP address, MyDNS.JP will apply your IP address to DNS i

    iww
    iww 2012/02/27
    とてもわかりやすい
  • C言語・C++言語用テスティングフレームワーク - Cutter

    最新リリース 2019-09-13にリリースされた1.2.7が最新です。 [ダウンロード] [変更点] Cutterとは Cutterは書きやすさ・デバッグのしやすさを重視したC言語・C++言語用のテスティングフレームワークです。メンテナンスしやすく、利用効果の高い単体テスト(ユニットテスト)の開発を支援します。 また、テストを苦痛ではなく、楽しいものにすることも重視しています。スクリーンショットはテスト結果の通知機能を利用している様子です。文字としてテストのパス・失敗を伝えるだけではなく、視覚的にも通知することで、テスト結果をわかりやすくします。わかりやすいので、頻繁にテストを実行したくなります。この機能はnotify-sendコマンド(Linuxや*BSDなどの場合)またはgrowlnotifyコマンド(macOSの場合)を利用します。 動作環境 CutterはDebian GNU/L

  • はいはい縦書き縦書き・・・・・ッ!? - Webと文字

    縦書き”ってどうやるの? 調べてみました。 エセ縦書き縦書き文庫】はじめに(管理人) 下に載っているのは全部エセ縦書きです。 縦書きサイト普及委員会 やっていることは いな           新 いん    ,─--.、 言と   ノ从ハ从   ス 葉聞   .リ ´∀`§ かこ    X_@X    レ |え   U|_____|U |の    ∪ ∪ ! ! と同じです。横向きを無理やり縦に見せてるわけですね。これを改善するには以下が焦点となります。 センターラインからのズレ 横向きと縦向きで形が違う文字 ex)「」ー これをfreetypeとtypeface.jsで改善して見ます。 ズレを直す そもそもの問題として、フォントによって縦書き出来るかどうかが分かれます。縦書きが可能なフォントには、縦書きした時のグリフ位置情報(縦書き用メトリクス)が含まれています。 このようなフォ

    はいはい縦書き縦書き・・・・・ッ!? - Webと文字
  • Account Suspended

    Account Suspended This Account Has Been Suspended

  • FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ

    Q1: デストラクタにvirtualをつけろとよく言われるけど、なんで? 挙動が未定義のdeleteを呼び出す可能性があるから Q2: 挙動が未定義だと駄目なの? 超駄目。何が起きても文句は言えない Q3: どんな時に挙動が未定義のdeleteが呼び出されるの? こんなとき // NoVirtualBaseClass : デストラクタにvirtualを持たない // NoVirtualSuperClass : NoVirtualBaseClassを継承 NoVirtualBaseClass * ptr = new NoVirtualSuperClass(); // 挙動が未定義 delete ptr; Q4: 何でそうなるの? delete時点で、ptrは自分がNoVirtualBaseClassのインスタンスだと思ってるから Q5: 何で?NoVirtualSuperClassでnewし

    FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ
  • 間違ったコードは間違って見えるようにする - The Joel on Software Translation Project

    Joel Spolsky / 青木靖 訳 2005年5月11日 水曜 私が最初の当の仕事をはじめたのは1983年9月に遡る。それはオラニムというイスラエルの大きな製パン工場で、16台の飛行機ほどもある巨大なオーブンで、毎晩10万個のパンが作られていた。 はじめて工場に入った時、そのあまりの汚さに信じられない思いだった。オーブンの側面は黄ばんでいるし、機械は錆びていて、そこらじゅうが油だらけだった。 「いつもこんなに汚いの?」と私は聞いてみた。 「なんだって? なんの話をしてるんだ?」とマネージャが答えた。「掃除したばかりだから、今が一番きれいな状態なんだ」 なんてこった。 毎朝の工場の清掃を何ヶ月か続けて、ようやく彼らの言っていたことが理解できるようになった。パン工場では、きれいというのは機械にパン生地が付いてないことを言うのだ。きれいというのは、ゴミ箱に発酵したパン生地が入ってないこと

  • 1