タグ

関連タグで絞り込む (160)

タグの絞り込みを解除

C++に関するdelegateのブックマーク (165)

  • 日報(2024-04-24) C++ の string_view の存在理由がやっと理解できた | Passé de mode

    なんですよね # 疑問点 string_view はコンストラクタで渡される string の文字列リテラルのポインタ^1をコピーして^2、それに string の const なメソッドを被せたようなクラスだと思ってて^3、まさに 関数の引数として文字列を受け取るため にあるようなクラスだというのはわかるのです でも なんで const string&じゃだめなの? const string& で受けても string_view で受けても引数の内部の文字列リテラルをコピーする事はないんだからコスト的には同じでは? だったらconst string& でも別にいいじゃん という、まさに string_view のraison d'être に疑問を感じ、腑に落ちないながらも長いものにはまかれろの精神で string_view を使っていました もしかしたら const も & もない分、

  • そろそろvolatileについて一言いっておくか - yamasaのネタ帳

    先月、CBUGとわんくまの勉強会にて、アトミック変数とかメモリバリアとかvolatileとかについて話をしてきました。 ちょっと遅くなりましたが、そのときの講演資料を一つにまとめたので、ここで公開しておきます。あと、補足記事も追加していってます。 volatileの実装の詳細について C++0xのメモリバリアについて(その1) C++0xのメモリバリアについて(その2) Double-Checked Lockingについて そろそろvolatileについて一言いっておくかView more presentations or Upload your own.

    そろそろvolatileについて一言いっておくか - yamasaのネタ帳
  • C++マルチスレッド全面ガイド:現場で使える実装テクニック7選

    C++でのマルチスレッド開発の基礎知識 マルチスレッドプログラミングが必要な理由 現代のソフトウェア開発において、マルチスレッドプログラミングは不可欠な技術となっています。その主な理由は以下の通りです: システムリソースの効率的な活用 マルチコアプロセッサの性能を最大限に活用 並列処理による処理速度の向上 システムリソースの効率的な分配 レスポンス性の向上 UIの応答性を保ちながら重い処理を実行 バックグラウンド処理の実現 ユーザー体験の向上 リアルタイム処理の実現 センサーデータの継続的な監視 ネットワーク通信の非同期処理 タイムクリティカルな処理の実行 C++11以降で導入された標準スレッド機能の概要 C++11で導入された標準スレッドライブラリは、マルチスレッドプログラミングを大幅に簡素化しました。主要な機能を見ていきましょう。 1. std::thread クラス 基的なスレッド

    C++マルチスレッド全面ガイド:現場で使える実装テクニック7選
    delegate
    delegate 2025/05/14
    [std::thread]
  • 「C++」の記事一覧

    2025年3月24日 std::vectorを完全理解!現場で使える実践的な活用法と最適化テクニック15選

    「C++」の記事一覧
  • 【完全ガイド】std::unordered_mapの使い方とパフォーマンス最適化テクニック10選

    以下は、両者の性能特性を示す簡単なベンチマーク例です: #include <chrono> #include <map> #include <unordered_map> void performance_comparison() { const int NUM_ELEMENTS = 1000000; // unordered_mapmapの準備 std::unordered_map<int, int> umap; std::map<int, int> map; // 挿入時間の計測 auto start = std::chrono::high_resolution_clock::now(); for (int i = 0; i < NUM_ELEMENTS; i++) { umap[i] = i; } auto end = std::chrono::high_resolution_cl

    【完全ガイド】std::unordered_mapの使い方とパフォーマンス最適化テクニック10選
    delegate
    delegate 2025/05/09
    [std::unordered_map]
  • C++の関数オブジェクトが関数よりどれだけ速いか - でも今日はSRMあるから

    C++では関数オブジェクトのほうが関数より速い。呼び出しの時間に差がある様子。 数回呼ぶだけなら誤差だが呼ぶ回数が増えるとその速度は有利。 ソート std::sortの比較関数に関数や関数オブジェクトを与える。 関数 bool cmp(int x, int y) { return x < y; } 関数オブジェクト struct cmp_c { bool operator()(int x, int y) { return x < y; } } cmp; ファンクタとかファンクショノイドとか呼ばれる。cmpは上の関数のcmpと同じように呼ぶことができる。 ラムダ式 auto cmp = [](int x, int y) -> bool { return x < y; }; C++11の記法。関数オブジェクトが作られる。 cmpの型はfunction< bool(int,int) >かと思われ

    C++の関数オブジェクトが関数よりどれだけ速いか - でも今日はSRMあるから
  • C++のcondition_variable::wait_forを完全ガイド!初心者からプロまで5つのサンプルで網羅

    ※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。 (送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。) はじめに C++プログラミングにおいて、マルチスレッド処理は非常に重要な役割を担います。 この記事では、C++の強力な同期メカニズムの一つであるcondition_variableとそのメソッドであるwait_forに焦点を当て、初心者からプロフェッショナルまで幅広く理解できるように解説します。 この機能をマスターすることで、効率的なスレッド処理とリソースの最適な使用が可能となります。 初心者の方も、この記事を通して基から応用までしっかりと学ぶことができるで

    C++のcondition_variable::wait_forを完全ガイド!初心者からプロまで5つのサンプルで網羅
  • C/C++ DLL から C# プログラムへのコールバックを実現する方法 - Qiita

    はじめに 筆者は、C++ で作ったDLLを C# アプリケーションから呼び出して使う事があります。その際、C/C++ で書かれた DLL と C# アプリケーションを連携させるうえで、C++のDLLからのコールバック、つまり ネイティブコード → C# の呼び出し(リバース P/Invoke)は必須であり、重要なポイントとなります。 記事では、.NET 7 で登場し、.NET 8、.NET 9 でさらに進化した LibraryImport を活用したコールバックの実装方法を解説します。 1. さらに進化した P/Invoke: LibraryImport 1.1 DllImport と LibraryImport の違い DllImport(.NET Framework 1.0 から存在) 開発者が手動で設定を行うため、マーシャリングや呼び出し規約の誤りによる実行時エラーが起こりやすい。

    C/C++ DLL から C# プログラムへのコールバックを実現する方法 - Qiita
  • C++のstd::atomicを使いこなす7つの方法

    ※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。 (送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。) はじめに C++では、効率的かつ安全なコードの記述が求められます。 この文脈において、std::atomicは極めて重要な役割を果たします。 この記事では、std::atomicがC++プログラミングにおいてなぜ重要なのか、その基から応用までを深く掘り下げ、初心者から上級者までが理解しやすい形で解説します。 さまざまな使用例とサンプルコードを通じて、std::atomicの効果的な利用方法を学びましょう。 ○std::atomicとは何か? std::ato

    C++のstd::atomicを使いこなす7つの方法
    delegate
    delegate 2025/03/05
    [std::atomic]
  • Pythonで作成した物体検出アプリをC++、C#でWindowsネイティブアプリに作り直した話 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? どのようなアプリか ゲーム FF14のプレイ動画からユーザー名を黒塗りする動画編集アプリです。 ユーザー名の検出に物体検出を利用しています。 Pythonで実装、PyinstallerでEXE化していましたが、C++、C#で作り直し、この度Microsoftストアに公開できました。わーい! ここでは、その経緯や直面した問題、得られたものなどを振り返りたいと思います。 最終的にそれぞれで利用した主なライブラリ Python pytorch,torch-tensorrt,ultralytics,opencv-python,ffmpeg-py

    Pythonで作成した物体検出アプリをC++、C#でWindowsネイティブアプリに作り直した話 - Qiita
  • 関数ポインタを辞めてstd::functionを使おう ついでにコールバックハンドラも: No Coding, No Life.

    STM32やらATXMEGAやらでなんかやったりする。C++ネタや、 プログラミングコンテストネタなんかもやってましたが最近はマイコンを使った電子工作メインです。 「引数を取ってなんか処理して値を返す」的なものをなんでも格納できるstd::functionです。 #include <iostream> #include <functional> int func(int a, int b) { return a + b; } int main() { // intを2つ受け取ってintを返す何かを格納するモノ std::function<int(int,int)> f; // フリー関数を格納 f = func; // 呼んでみる -> フリー関数が呼ばれる std::cout << f(1, 2) << std::endl; return 0; } 実行結果: 3 ここまではたいして面白

    関数ポインタを辞めてstd::functionを使おう ついでにコールバックハンドラも: No Coding, No Life.
  • C++のstd::functionは遅いらしいのでもっと高速なコールバック機構を考えてみた | Tech Notes

    C++で開発をしていると時折悩むのが、「関数を受け取る場合どのように受け取り保持するか」という問題だ。C++にはこれに対する解が3つほどある。 悩むというのは実現できなくて悩むのではなく、どれを使って実現するかを悩むのである。 関数ポインタで受け取る。テンプレートで受け取る。std::functionで受け取る。関数ポインタは最も単純な方法だ。しかし外部変数のキャプチャができない。 そこで、多くのC言語ライブラリではコールバック関数に加えてvoid*型の任意値をユーザーが渡せるようにすることで解決する。 しかし現代のまともな C++er であればこう思うだろう――「ラムダ式のキャプチャリストを使わせろ」と。 この点でテンプレートとstd::functionは優れている。通常の関数だけでなく任意の関数オブジェクトが使えるので、どんなデータでも持たせることが可能だ。当然ラムダ式も使える。テンプ

    C++のstd::functionは遅いらしいのでもっと高速なコールバック機構を考えてみた | Tech Notes
  • C++のthread::detachの5つの使い方と応用例を解説

    ※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。 (送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。) はじめに C++プログラミングにおいて、スレッドは並行処理を実現する重要な要素です。 多くの場合、プログラムは複数の処理を同時に行う必要がありますが、これはスレッドを用いて行われます。 記事では、C++におけるスレッド操作の一つであるthread::detachに焦点を当て、その使い方から応用例までを詳細に解説します。 初心者の方でも理解しやすいように、基から順を追って説明していきます。 さらに、実際のサンプルコードも提供し、より深い理解を促します。 この

    C++のthread::detachの5つの使い方と応用例を解説
  • sqlite3でDBを操作してみる(C++編) - Elsaの技術日記(徒然なるままに)

    以前sqlについて簡単にまとめました。 今までnodejsやpythongo言語などでsqlを用いてDBの操作したことがあったのですが、 CやC++sqlを利用したことがなかったので今回使ってみました!! elsammit-beginnerblg.hatenablog.com ちょっとばかしクセのある使い方だったので備忘録として残しておこうと思います。 ■環境構築 ■sqlite3操作(データベースを開く) ■sqlite3操作(テーブルを作成する) ■sqlite3操作(データを挿入) ■sqlite3操作(テーブル有無チェック) ■最後に ■参考 ■環境構築 今回用いる環境ですが"Ubuntu 20.04"を用いました。 C言語やC++sqlite3 を用いる場合には、 sqlite3.hが必要になるのですが、標準ではこららのライブラリが未インストールになります。 そこでこちらの

    sqlite3でDBを操作してみる(C++編) - Elsaの技術日記(徒然なるままに)
  • デバッグ出力ストリーム - Qiita

    Windows には OutputDebugString という API が用意されています。 これはデバッガへ文字列を通知するものです。 WindowsGUI アプリケーションはコンソールに接続されていないのでいわゆるプリントデバッグがやりづらいのですが、この API を介して状況を把握できます。 デバッガがアタッチされていないときのメッセージは単に捨てられるので、リリース版のソフトにそのまま残しておいてもそれほど害にはなりません。 ごく僅(わず)かに余計な処理をすることになるだけです。 さて、この API は便利なのですが、 C++ を使っているときには不満な部分もあります。 C++ のオブジェクトを表示する方法はしばしばストリームに対するものしか定義しないことがあり、それを API に渡せる文字配列にするには一度 stringstream に出力するなどといった迂遠な方法を取る

    デバッグ出力ストリーム - Qiita
  • 今どきのプログラミング言語では当たり前! Modern C++で使えるモダンな言語仕様

    はじめに C言語から派生したオブジェクト指向プログラミング言語であるC++は、21世紀に入ってまったく別物とも言えるプログラミング言語に成長していきました。それは、Modern C++と称されています。1990年代にC++を触っていたプログラマが現在の仕様を知れば、隔世感に苛まれるのではないでしょうか。連載では、かつてはC++をたしなんでいたという方、今からC++言語を始めるという方に向けて、Modern C++らしい言語仕様をピックアップし紹介していくことで、今のC++言語の姿を理解していただきます。 対象読者 かつてはC++をたしなんでいたという方 今からC++言語を始めるという方 モダンなプログラミング言語のパラダイムに興味のある方 必要な環境 記事のサンプルコードは、以下の環境で動作を確認しています。 macOS Sonoma/Windows 11 Xcode Command

    今どきのプログラミング言語では当たり前! Modern C++で使えるモダンな言語仕様
  • C++erは全員戻り値型の後置記法を使おう - ◯◯◯◯ソフト開発日誌

    目次 目次 「戻り値型の後置記法」って何? 何が嬉しいの? 問題点 「戻り値型の後置記法」って何? C++11から導入された言語仕様です。 タイトルの呼び方は自分が勝手に使っているだけで、英語圏だと「trailing-return-type」がよく使われるらしい。 cpprefjp.github.io この仕様を使うと例えば以下のようなコードが int Add(int a, int b) { return a + b; } このようになります。 auto Add(int a, int b) -> int { return a + b; } 何が嬉しいの? この仕様はC++のメタプログラミングで戻り値型の推論を簡単に行う目的で使用されます。 なんだ、そんなC++上級者のための機能なんて下々の人間には関係ないじゃん、とお思いかもしれませんが、この機能にはもう一つわかりやすい大きなメリットがある

    C++erは全員戻り値型の後置記法を使おう - ◯◯◯◯ソフト開発日誌
  • 【C++】string型をcharに変換/コピーする方法【値 配列 ポインタ string to char】

    C++の文字列クラスをchar型やchar配列、C言語形式の文字列へ変換またはコピーする方法を紹介します。 目次 std::string → const char*(C言語形式の文字列へ変換) std::string → char*(ヌル終端文字列のコピー) std::string → char[](固定長配列へのコピー) std::string → char[] (部分文字列をコピーする場合) std::string → char(文字型への変換) std::u16string → char16_t(ワイド文字列のコピー) std::string → const char* std::string型のメンバ関数c_strで、C言語スタイルの文字列をポインタとして取得することができます。 std::string str("abc"); const char* cstr = str.c_st

  • C++では定数はヘッダではなくソースファイルに書こう - 結果だけでなく過程も見てください

    特定の意味をもつリターンコード等の固定値は ある程度1つのヘッダに集中して定義すると思います。 例えば、C言語ではマクロ変数を使用して以下のように定義します。 人によってはC++でも以下のように定義するかもしれません。 #define RETCODE_SUCCESS (0) #define RETCODE_FAIL (1) #define RETCODE_WARN (2) マクロ変数は、コンパイラではなくプリプロセッサで置き換えられるので コンパイラはRETCODE_SUCCESSやRETCODE_FAILなどのシンボルを 認識することができません。 これはプログラム上の各所にマジックナンバーが散りばめられる ことになり、デバッグ時などには都合がよろしくないということで、 C++では以下のように定義することを推奨しています。 このへんはEffective C++の2項あたりにも書いてたと思

    C++では定数はヘッダではなくソースファイルに書こう - 結果だけでなく過程も見てください
  • [C++]std::mapに[]でアクセスする場合の作用について

    #include <stdio.h> #include <map> #include <chrono> using namespace std; int getGood(map<int,int> &m, int key, int default_value) { auto found = m.find(key); if(found == end(m)) { return default_value; } return found->second; } int getBad(map<int,int> &m, int key, int default_value) { if(m.find(key) == end(m)) { return default_value; } return m[key]; } int insertGood(map<int,int> &m, int key, int

    [C++]std::mapに[]でアクセスする場合の作用について
    delegate
    delegate 2024/04/09
    [std::map][あとで読む]