タグ

C++に関するy_rのブックマーク (120)

  • みんなも使おうif constexpr - Qiita

    この記事は C++ Advent Calendar 2018 の20日目の記事です. 昨日は @Kogia_sima さんの「 filesystemの標準入りが嬉しすぎてライブラリを作った話 」でした.filesystemの標準入りが嬉しい,わかる. 修論に手がついてなくて大分やばいため,今年の内容は簡素なものになりました1. 平成最後のAdCですが2,C++17の if constexpr が便利という話をします3. 正直「わぁ便利だね!」って言うような人はもう知ってる内容な気がするんですけど… if constexpr is 何 方々で「 if constexpr はコンパイル時if文ではない!!!!!!!!!!!!!!!!!」とか言われたりして,「じゃあなんなんだよ」って思ってたんですが,ざっくり言うと

    みんなも使おうif constexpr - Qiita
    y_r
    y_r 2019/04/05
  • C++ で型によるコンパイル時条件分岐技法まとめ - Qiita

    ブログ記事からの転載です。 初心者C++er Advent Calendar 2016 11日目の記事です。 空いてるようなのでまた書きました。 さて、初心者用ということで型を使用した『コンパイル時条件分岐技法』を簡単に紹介してみます。 [注意] 記事では C++11 で動作することを想定してるコードになります。 [多重定義] まずは一番よく利用されている多重定義ですね。 C++ では引数の型を変えることで複数の関数を定義することが出来ます。 void print(int n){ std::printf("int 型:%d\n", n); } void print(float f){ std::printf("float 型:%f\n", f); } void print(char const* str){ std::printf("char const* 型:%s\n", str);

    C++ で型によるコンパイル時条件分岐技法まとめ - Qiita
  • clang/gccに組み込まれたAddressSanitizer/LeakSanitizerでメモリエラーを捕捉する - 千里霧中

    C/C++でのユニットテストによるメモリリーク検出 - 千里霧中の補足。 メモリエラーの検出方法についてだけれど、最近のclangやgccだと、AddressSanitizerという動的解析ツールが組み込まれており、それを活用できる。 使用する場合はコンパイラオプション「-fsanitize=address」「-fsanitize=leak」等を指定する。 題材 例えば以下のコードを対象にする。 //main.c #include <stdio.h> #include <stdlib.h> void hoge(void) { int *a_buff = (int *)malloc(5 * sizeof(int)); a_buff[10] = 8; } int main(void) { printf("test\n"); hoge(); return 0; } これを普通にコンパイルして実行

    clang/gccに組み込まれたAddressSanitizer/LeakSanitizerでメモリエラーを捕捉する - 千里霧中
    y_r
    y_r 2019/04/03
  • AddressSanitizer

    Introduction AddressSanitizer (aka ASan) is a memory error detector for C/C++. It finds: Use after free (dangling pointer dereference) Heap buffer overflow Stack buffer overflow Global buffer overflow Use after return Use after scope Initialization order bugs Memory leaks This tool is very fast. The average slowdown of the instrumented program is ~2x (see AddressSanitizerPerformanceNumbers). The t

    AddressSanitizer
    y_r
    y_r 2019/04/03
    メモリデバッグのおともに / gcc 4.8 以降なら -fsanitize=address で使える模様
  • Visual Studio で UTF-8 でC++を書いたら心が折れそうになった件 - Hikware.Tech

    Visual Studio で C++ のソースを UTF-8 で書くと執拗な嫌がらせを受けるが、他の開発環境とクロスで開発する以上、UTF-8 で書きたい。 Visual Studio 2017 になってなお C# は普通に UTF-8 でソースを書けてたんで油断してたけど、2017 年にもなってなお、C++ のソースは UTF-16 か、標準のマルチバイトコード(日ならS-JIS)のどちらかで書く前提 になっていて、UTF-8 でコメント書いただけでも、 的なワーニングが出る。超うぜえ!何これ超うぜえ!。最新の開発環境でこんな仕打ちを受けるとは思ってもいなかった。 さらに腹立つのが、Visual Studio はプロジェクトを新規作成すると、わざわざ日語のコメント付きのテンプレートソースを出力してくれるんだけど、それがなんでか UTF-8。なので当然、初回ビルドからワーニング出まく

    y_r
    y_r 2019/04/03
    UTF-8 で警告が出る場合の対応 (vs 2015 限定?) VS2013 だとうまくいかなかった
  • GCCのビルトイン関数メモ - naoya_t@hatenablog

    http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html より 関数名末尾に l が付いてるのは long、ll なら long long、無印は unsigned int。 他にもいろいろあるけど、コンテストで使うかもしれないやつだけとりあえず。 __builtin_popcount, __builtin_popcountl, __builtin_popcountll 立ってるビット数を数えて返す 0x11 (2進で10001) なら2 0x57 (2進で1010111) なら5 __builtin_parity, __builtin_parityl, __builtin_parityll 立ってるビット数の偶奇を返す。(popcount % 2 に相当) 0x11 (2進で10001) なら0(偶数) 0x57 (2進で1010111)

    GCCのビルトイン関数メモ - naoya_t@hatenablog
  • https://codeday.me/jp/qa/20181208/65120.html

    y_r
    y_r 2019/02/06
    こんなものが... (fast, least)
  • 闇夜のC++

    術者が高度に言語を理解している限りにおいては高度に最適化された術式を出力できる __アンサイクロペディア C++概要より [showwhatsnew] C++Language テンプレートの特殊化 共変型の戻り値とオーバーライドルールの緩和 非public継承の使いどころ virtualの伝播 禁忌の識別子 Plain Old Data Argument Dependent Lookup 最も速い数値型 ポータビリティの高い数値型 クラスの不定なメモリレイアウト newの実装 deleteの呼び出しと実装 真に安全なsafe_delete C++ Coding Technique privateメンバへ合法的にアクセス Pimplイディオム アクセス指定子の無効化 do-while(0)によるマクロラッピング インクルードガード レガシー環境でnullptr 配列の要素数の取得方法 ADL

  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - cpprefjp C++語リファレンス 追記 全ての開発者が知っておくべきUnicodeについての最低限の知識 - GIGAZINE Unicodeについて簡潔にまとまってるいい記事を見つけました。 Caution この文章には以下の要素が含まれます。苦手

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
    y_r
    y_r 2018/12/23
    このあたり他言語も他人事ではない。例えば node.js で "'😀'.length" ってやったら 1 ではなく 2 になる。
  • 一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita

    仰々しいタイトルですみません。 それぞれが絡み合ってるのであんまり綺麗にまとまっていませんが、一時オブジェクト、右辺値、左辺値、ムーブセマンティクスのお話をします。 4/11 ideoneへのURLをコード例の下に追記しました。 飛ぶと実際に実行した様子を見ることが出来ます。 一時オブジェクト ( = 右辺値 ) 一時オブジェクトは、右辺値と同等の意味合いで使われます。 すなわち、関数の戻り値、コンストラクタによって生成された直後のインスタンス、リテラルなどもここに入れることができるでしょう。 基的に一時オブジェクトはその式( expression )が評価された時点で破棄されます。 struct something { ~something() { std::cout << "destructor" << std::endl; } }; something func() { retur

    一時オブジェクトの寿命と右辺値参照、ムーブセマンティクスのお話 - Qiita
  • Obscure C++ Features - Made by Evan

    This page is a collection of obscure C++ features, gathered over the years as I've explored different corners of the language. C++ is very big and I'm always learning more about it. Hopefully you'll learn something from this page even if you already know C++ pretty well. The features below are roughly ordered from least to most obscure. What square brackets really mean Accessing an element of an a

    y_r
    y_r 2018/11/06
    バッドノウハウなのか高等テクニックなのか...
  • ジェネリックコンポーネントにおける例外安全性 - boostjp

    C++標準ライブラリのために規定した例外安全性の経験から学んだこと David Abrahams david.abrahams@rcn.com 翻訳元:http://www.boost.org/community/exception_safety.html 概要 この文書は実世界の必要性に対する応答の中で蓄積された知識を表す: つまり、 C++ 標準テンプレートライブラリは、役立つ、そして明確な例外との相互作用を示し、 エラー捕捉の機構は C++ 言語の中核に組み込まれている。 この文書では、例外安全性の意味を探求し、例外と汎用性についての驚くべき神話を明らかにし、 プログラムの正当性を理由付けるための価値ある道具について述べ、 例外安全性を実証するための自動化されたテストの手続きを概説する。 Keywords: exception-safety, exceptions, STL, C++

  • noexcept - cpprefjp C++日本語リファレンス

    概要 C++11で導入されたnoexceptキーワードには、以下の2つの意味がある: ひとつは、throwキーワードによる例外仕様の代替。関数がどの例外を送出する可能性があるかを列挙するのではなく、例外を送出する可能性があるかないかのみを指定する。例外を送出する可能性がある関数にはnoexcept(false)を指定し、例外を送出する可能性がない関数にはnoexcept(true)もしくはnoexceptを指定する: class Integer { int value_ = 0; public: // getValue()メンバ関数は、例外を送出しない int getValue() const noexcept { return value_; } }; noexceptキーワードのもうひとつの意味は、式が例外を送出する可能性があるかどうかを判定する演算子である。noexcept(f(ar

  • constexprとconstを正しく使い分ける - Qiita

    はじめに これまでconst修飾してきたものには2種類あった、ひとつはROM化可能な値、もうひとつは実行時にしか決まらないがいったん初期化したあとは二度と変更されない値である。C++11以降、前者はconstexprが受け持ち、後者はconstが受け持つことになった。 constexpr指定子は、constexprの制約を満たした変数の定義、関数と関数テンプレートの宣言、staticデータメンバーの宣言に対して使用できる。 2つの区別 constは型修飾子である。const intはint型であるが、初期化したあとは二度と変更されない変数である。C++11以降、constexprが導入されたあとは、constはRAMにしか配置できない変数に対して使う修飾子となった。 constexprは型修飾子ではなく、型指定子である。型を修飾するものでなく、ROM化できる、または、ROM化できる可能性が

    constexprとconstを正しく使い分ける - Qiita
  • https://www.ipa.go.jp/archive/publish/qv6pgp00000011mh-att/000064005.pdf

    y_r
    y_r 2018/11/05
    組込みソフトウェア開発向けコーディング作法ガイド[C言語版]ESCR ver3.0
  • 実践C++入門講座1回目 なぜ今C++を学習するのか? | Theolizer®

    C++は高速なプログラムを多くのプラットフォーム向けに高い生産性で開発できることが特長です。 多数のCPUメーカ、OSベンダー、オープン・ソース・プロジェクトから 多種類のコンピュータ用コンパイラとライブラリ(以後、処理系と呼びます)が提供されてます しかも、ワールド・ワイドな標準規格(ISO/IEC)により、多数の実装において比較的高いレベルで仕様が統一されています これらの特長により、多くの基幹的なアプリケーション・ソフトウェアや各種ミドルウェアがC++で開発されています。更に膨大なソフトウェア資産あります。 従って、今後も基幹的なソフトウェアや高速性が要求されるソフトウェアの開発にはC++が使われ続けます。 C++に近い言語として、C++の前身であるC言語があります。C言語も高速なプログラムを多くのプラットフォーム向けにアセンブラよりは高い生産性で開発できます。そして、C++よりも更

    実践C++入門講座1回目 なぜ今C++を学習するのか? | Theolizer®
  • volatile変数とマルチスレッドとの関係についての押し問答(後編) - yohhoyの日記

    プログラミング言語C++のvolatile変数がスレッド間の同期機構として機能するか否かという論点について、有りそうな質問とその答えについての簡易メモの続きの続き。(自身の思考整理用) ある変数がスレッド間の同期機構として機能するためには、下記3つの性質が保証されることが要求される。volatile変数ではこれらのいずれも保証されないため、同期機構としては利用できない。 原子性(atomicity) → id:yohhoy:20121016 可視性(visibility) → id:yohhoy:20131009 順序性(ordering) 順序性の保証 注意:簡単のため、atomic変数への逐次一貫性(sequential consistency)アクセスのみを対象とする。これはC++11 atomicアクセス操作における既定動作である。 説明のためコード例示に番号[A]〜[D]を追加付

    volatile変数とマルチスレッドとの関係についての押し問答(後編) - yohhoyの日記
  • volatile変数とマルチスレッドとの関係についての押し問答(中編) - yohhoyの日記

    プログラミング言語C++のvolatile変数がスレッド間の同期機構として機能するか否かという論点について、有りそうな質問とその答えについての簡易メモ(→id:yohhoy:20121016)の続き。(自身の思考整理用) ある変数がスレッド間の同期機構として機能するためには、下記3つの性質が保証されることが要求される。volatile変数ではこれらのいずれも保証されないため、同期機構としては利用できない。 原子性(atomicity) 可視性(visibility) 順序性(ordering) 原子性の保証 前回記事では、原子性(atomicity)の保証についてのみ説明している。 volatile変数ではダメだという反例を挙げよ volatile変数への読み書きは不可分(atomic)操作であるとは保証されない。仮にレジスタサイズ2byte長のマシンを想定した場合、同環境では4byteサ

    volatile変数とマルチスレッドとの関係についての押し問答(中編) - yohhoyの日記
  • volatile変数とマルチスレッドとの関係についての押し問答(前編) - yohhoyの日記

    プログラミング言語C++のvolatile変数がスレッド間の同期機構として機能するか否かという論点について、有りそうな質問とその答えについての簡易メモ。(自身の思考整理用) 結論:このプログラムは可搬性が無く、未定義動作(undefined behavior)を引き起こす。C++11ではvolatile変数でなくatomic変数を用いるべき。C++03以前ではコンパイラ依存の仕組みを利用する。 volatile int running = 1; // 処理スレッド void another_thread() { while (running) { // ??? //... } } // 制御側スレッド void main_thread() { //... running = 0; // ??? } C++言語仕様ではどう定義される?(C++03以前) C++03以前のC++言語仕様ではそも

    volatile変数とマルチスレッドとの関係についての押し問答(前編) - yohhoyの日記
  • C++のムーブと完全転送を知る - Fixstars Tech Blog /proc/cpuinfo

    社内勉強会、今期(と言ってももうあと1ヶ月もないですが)は、数理最適化勉強会と、Effective Modern C++輪読会をしています。この記事は、後者のEffective Modern C++輪読会で、『Effective Modern C++』5章の一部を輪読した時の資料を流用したものです。 C++11と言えば、昔のC++(03)から色々あって多くの機能が追加されとても便利になったバージョンです。さらに、C++14は11では間に合わなかった・忘れていた色々な便利なものを補填したもので、Effective Modern C++輪読会は、『Effective Modern C++』を教科書にしながらこのC++11/14について学ぶ会になっています。 時は既に2016年、gccもclangもMSVC++も概ねC++14が使えるようになっており、もはやC++14が使えないコンパイラにはC+

    C++のムーブと完全転送を知る - Fixstars Tech Blog /proc/cpuinfo
    y_r
    y_r 2018/10/25
    なるほど、わからんのような気がするが...