タグ

c++に関するnharukiのブックマーク (198)

  • C++17標準ライブラリの細かい変更いろいろ その1 - Faith and Brave - C++で遊ぼう

    最近cpprefjpに書いたものを列挙します。 assertマクロがconstexpr関数内で使用できるようになった std::next()関数のイテレータ要件がForward IteratorからInput Iteratorに緩和された std::addressof()がconst T&&の引数を禁止にした。addressof<const T>(T())のようにするとconst T&&が指定できていた std::addressof()がconstexprに対応した std::mutexとかstd::recursive_mutexのlock()メンバ関数が、device_or_resource_busyのエラーを起こらなくした 非順序連想コンテナのreserve()メンバ関数が、C++14までn-1以上の予約していたが、C++17からn以上が予約されるようになった std::shared_

    C++17標準ライブラリの細かい変更いろいろ その1 - Faith and Brave - C++で遊ぼう
    nharuki
    nharuki 2017/07/04
  • Wandboxを支える技術(2017年版) - Qiita

    Wandbox は、オンラインでコンパイルや実行が試せるサービスで、主に私(@melponn) と @kikairoya で作っています。 以前 Wandboxを支える技術 というのを書いていたのですが、そこからかなり変わっているため、改めて今の中身がどうなってるかについて書いていきます。 Wandbox は、Wandbox 体と、各種コンパイラをビルドするための Wandbox Builder に分かれています。 ソースコードは wandbox と wandbox-builder にあります。 2019/9/26 追記: Wandbox のビルドを CMake に移行した話 を書きました 犬小屋と牛舎 Wandboxはバックエンドとフロントエンドで分かれていて、フロントエンド側が 犬小屋(kennel) 、バックエンド側が 牛舎(cattleshed) という名前になっています。 犬小

    Wandboxを支える技術(2017年版) - Qiita
    nharuki
    nharuki 2017/05/19
    やCN1
  • GotW #29: Strings

    nharuki
    nharuki 2017/05/10
    std::stringを使ってCase insensitiveな比較をするための拡張方法。 "Herb: char_traitsだけ定義してbasic_stringを特殊化するといいお"
  • C++11の特殊メソッド自動生成ルール - Qiita

    特殊メソッド? コンパイル時にルールに従って自動的にclassに追加されるメソッドの事。 C++11より前は4つでしたがC++11でムーブ演算が追加され5つになりました。 その影響かどうかはわかりませんがメソッドの自動生成ルールが変更されている部分があるのでそれをまとめてみます。 ※単語について コピー演算 = コピーコンストラクタ と コピー代入演算子 の事。 ムーブ演算 = ムーブコンストラクタ と ムーブ代入演算子 の事。 デフォルトコンストラクタ 前と同じでコンストラクタを宣言しないクラスの場合にのみ生成される。 デストラクタ デフォルトで noexcept になる点以外は前と同じ。 コピーコンストラクタ コピーコンストラクタを宣言しないクラスの場合にのみ生成される。 ムーブ演算を宣言したクラスの場合は生成されない。 コピー代入演算子やデストラクタを宣言したクラスに対するコピーコン

    C++11の特殊メソッド自動生成ルール - Qiita
    nharuki
    nharuki 2017/04/27
  • 若手エンジニアを不幸にしないためのC++コーディングべからず集 - Qiita

    仕事としてソースコードを書く以上、ソースコードを利用する人、ソースコードを書く人がともに幸せになるようなソースコードの書き方をすべきだと私は考えている。Doxygen(日語による解説サイト)を使って、詳細の実装の仕様書を作成するように推進している理由の一つは、ソースコードとは別のドキュメントを作成する手間を減らして、負担を減らすことも目的の1つだ。 とりわけ若手エンジニアのみなさん、 仕事としてソフトウェアを書くのだから、仕事を通じて自分が幸せになるようなソフトウェアの書き方をしてください。もし、ここに例示してあるような書き方をしている場合には、ソースコードの書き方について学んでみてください。 浮動小数点を==や!=で比較する。 マジックナンバーを埋め込む。 対話的な使い方だからといって、全ての部分を単体テストで再現性を可能にしないインタフェースだけで実装する。 分岐の必要のない内容を

    若手エンジニアを不幸にしないためのC++コーディングべからず集 - Qiita
    nharuki
    nharuki 2017/04/20
  • std::stringのSSO(Small-string optimization)がどうなっているか調べた - Qiita

    GCC と Clang の SSO が気になったので調べました。 SSO(Small-string optimization)とは 通常、std::string は文字列を確保する際、動的にメモリを確保します。 しかし "aaa" とか "hogehoge" とかの小さい文字列でメモリをアロケートするのは勿体無い。 何とかメモリを確保せずに済ませようと頑張って最適化された実装が SSO です。 具体的には、std::string オブジェクトの中に文字列を格納します。 こうすることで、メモリをアロケートせずに文字列を格納できます。 ただし、これは全ての std::string オブジェクトのサイズが増えることになります。 通常、std::basic_string には以下のデータが必要になります。 文字列の実体へのポインタ 利用している文字列のサイズ(size) 確保している領域のキャパシ

    std::stringのSSO(Small-string optimization)がどうなっているか調べた - Qiita
    nharuki
    nharuki 2017/04/19
  • ld 2.18 の -Bsymbolic オプションを使うと共有ライブラリ内でシンボルをローカルバインドできる - daily dayflower

    Linux の共有ライブラリの挙動について - daily dayflower の続きです。 下記は Ubuntu Hardy (8.04) i386 で動作確認しました。 ld 2.18 の -Bsymbolic オプション 昨日書いた通り,Linux で共有ライブラリを利用したプログラムを作る場合,共有ライブラリ内部の関数呼び出し(や変数アクセス)は ld.so を経由して行われます。 このパフォーマンスゲインやシンボル解決の危険性を解決するために ld 2.18 から -Bsymbolic オプションが新設されました。マニュアルから引用します。 -Bsymbolic When creating a shared library, bind references to global symbols to the definition within the shared library,

    ld 2.18 の -Bsymbolic オプションを使うと共有ライブラリ内でシンボルをローカルバインドできる - daily dayflower
    nharuki
    nharuki 2017/02/22
    soファイル内からの関数呼び出し時にld.soによるシンボル解決をせずso内で完結させる方法 (プロセス内でシンボルが重複して意図しないコールスタックになる問題の回避に使える…かも)
  • Loading...

    nharuki
    nharuki 2017/01/06
    C++で書けるREST APIサーバフレームワーク
  • (翻訳)C/C++のStrict Aliasingを理解する または - どうして#$@##@^%コンパイラは僕がしたい事をさせてくれないの! - yohhoyの日記

    元記事:Understanding C/C++ Strict Aliasing, or - Why won't the #$@##@^% compiler let me do what I need to do!, Patrick Horgan氏 訳出メモ: 自分自身の理解のために日語訳を行ったStrict Aliasing Rules解説記事。 訳文中では "aliasing/alias", "strict aliasing rules", "type punning" をそのまま表記する。直訳すれば "別名(エイリアシング)", "厳密な別名規則", "型もじり(言い換え)" となる。 ところで、何が問題なの? strict aliasing rulesに関しては多くの混乱が見られます。人々を混乱させる主要因となっているのは、aliasingに言及する2種類の異なるグループ; コンパ

    (翻訳)C/C++のStrict Aliasingを理解する または - どうして#$@##@^%コンパイラは僕がしたい事をさせてくれないの! - yohhoyの日記
    nharuki
    nharuki 2016/10/26
  • C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) C言語の規格のリビジョン間には微妙な違いがありますが、このことを利用して「C90、C99、C11のどれとしてコンパイルされたかどうかにより、違う挙動をする」というプログラムを作ることが可能です。同様に、C++はほぼC言語の上位互換ですが、C言語とC++で違った結果を生み出すプログラムも存在します。 これは2015年の International Obfuscated C Code Contest (難読Cコード・国際コンテスト)への Don Yangの投稿 において、 C89、C99、C11、C++98、C11のどれとしてコンパイルされるかによって異なる出力を生成するプログラムを作成するのに使われています。C90の場合は、以下のような星形を出力します。 **************************

    C90, C99, C11, C++98, C++11で異なる動作をするコード | POSTD
    nharuki
    nharuki 2016/09/14
    闇深…
  • C++ プログラマとしてのスキルを測る質問 - torutkの日記

    C++プログラマ採用試験で聞くとよい質問だそうです。 The Best Questions for Would-be C++ Programmers,Part 1 The Best Questions for Would-be C++ Programmers,Part 2 Part 1の10の質問をざっと日語訳 クラスとは何ですか? C言語の構造体とC++言語の構造体との違いは何ですか? constキーワードの意味はなんですか?#defineに比べてよい点は何ですか? private、public、protectedアクセス修飾子の違いを説明できますか? public継承とprivate継承について説明できますか? friendキーワードは役に立ちますか? class MyFancyClass {}; と定義したとき、コンパイラが自動生成するメソッドは何ですか? コンパイラに上述のメソッ

    C++ プログラマとしてのスキルを測る質問 - torutkの日記
    nharuki
    nharuki 2016/09/02
    大体全部そらでこたえられた…はず…
  • Policies/Binary Compatibility Issues With C++ - KDE Community Wiki

    <languages /> <translate> Definition A library is binary compatible, if a program linked dynamically to a former version of the library continues running with newer versions of the library without the need to recompile. If a program needs to be recompiled to run with a new version of library but doesn't require any further modifications, the library is source compatible. Binary compatibility saves

    nharuki
    nharuki 2016/08/18
    C++におけるバイナリ互換性・ソース互換性
  • UNIX上でのC++ソフトウェア設計の定石 (3) - memologue

    鉄則3: マルチスレッドのプログラムでのforkはやめよう マルチスレッドのプログラムで、「自スレッド以外のスレッドが存在している状態」でfork*1を行うと、さまざまな問題を引き起こす可能性があります。「問題」の典型例としては、子プロセスのデッドロックが挙げられます。問題の詳細を把握しないまま、マルチスレッドのプログラムで不用意にforkするのはやめましょう! 何が起きるか 実例から見てみましょう。次のコードを実行すると、子プロセスは実行開始直後のdoit() 呼び出し時、高い確率でデッドロックします。 void* doit(void*) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); struct timespec ts = {10, 0}; nanoslee

    UNIX上でのC++ソフトウェア設計の定石 (3) - memologue
    nharuki
    nharuki 2016/07/01
    ほんと意味わからんところでデッドロックするので、悪いことは言わないが、や め と け
  • C++11スマートポインタで避けるべき過ち Top10 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) 私は新しいC++11のスマートポインタをとても気に入っています。自分でメモリを管理するのが嫌だと感じる多くの仲間たちにとって、これはいろいろな面で天の助けでした。私の場合、このおかげで新人にC++を教えるのがずっと楽になりました。 しかし、C++11のスマートポインタを幅広く使っていた2年ちょっとの間で、使い方を誤ると、プログラムの効率が落ちたりクラッシュして壊れたりするという事態に何度も遭遇しました。参照用に、以下に例を載せました。 まずはこれらの”過ち”を、簡単なAircraftクラスを例に取って見てみましょう。 class Aircraft { private: string m_model; public: int m_flyCount; weak_p

    C++11スマートポインタで避けるべき過ち Top10 | POSTD
  • C++erを簡易的にレベル分けすることで初心者詐欺を減らそうという試み - Qiita

    はじめに @takeokunn そういや私の昨日のツイートたどってみ、C++初心者(boost.asioが使えないとは言っていない)の人とQiitaでやりとりしてたから — yumetodo-C++erだけど化学科 (@yumetodo) 2016年5月3日 @yumetodo だからC++erの初心者は初心者じゃないんだよ!!!!!!!!!!!!! だからC++er嫌いなんだよ!!!!!!!! — たけてぃ (@takeokunn) 2016年5月3日 @takeokunn 当人も「そろそろ中級者かな」 と言ってた 因みに C初心者 < C++初学者 < C++入門者 < C++初心者 < C++規格書リーディング初心者 < C++中級者 < C++規格書リーディング中級者 < C++上級者 < C++規格書クラッカー — yumetodo-C++erだけど化学科 (@yumetodo)

    C++erを簡易的にレベル分けすることで初心者詐欺を減らそうという試み - Qiita
    nharuki
    nharuki 2016/05/13
    やっべ、俺“C++規格書リーディング初心者”だった。まだまだだな…
  • GitHub - google/gtest-parallel: Run Google Test suites in parallel.

    nharuki
    nharuki 2016/05/11
    gtestを並列実行するPythonスクリプト
  • jyt.io - Domain Name For Sale | Dan.com

    Buyer Protection Program When you buy a domain name at Dan.com, you’re automatically covered by our unique Buyer Protection Program. Read more about how we keep you safe on our Trust and Security page. Next to our secure domain ownership transfer process, we strictly monitor all transactions. If anything looks weird, we take immediate action. And if the seller doesn't deliver on their part of the

    jyt.io - Domain Name For Sale | Dan.com
    nharuki
    nharuki 2016/04/18
    LLVMによるJITコンパイラを備えたC++処理系
  • C++ における整数型の怪と "移植性のある" オーバーフローチェッカー (第1回 : 整数型の怪と対策の不足) - Qiita

    はじめに 整数型の取り扱い (表現可能な値の範囲を超える "整数オーバーフロー" を防ぐなど) は、セキュリティ上の問題を避けるために、そうでなくとも予期しないバグを避けるために (頻繁に!) 注意しなければならないことだと言えるでしょう。 整数オーバーフローは、特に C/C++ においては深刻な脆弱性の原因になりがちです。昨年界隈を騒がせた Android の Stagefright としてくくられている複数の脆弱性のうち大部分は、この整数オーバーフローが原因となっています。 ただ、C++ における整数型は、実に奇妙です。その奇妙さの結果、C++ において整数オーバーフローを防ぐことは非常に難しいことが……あまり知られていません。というわけで、数回に分けて C++ における整数型 (特に符号付き整数型) の仕様とその奇妙なところ、何故整数オーバーフローチェックが難しいのか、それでもどうや

    C++ における整数型の怪と "移植性のある" オーバーフローチェッカー (第1回 : 整数型の怪と対策の不足) - Qiita
    nharuki
    nharuki 2016/02/23
    闇は深い…
  • Home - Metashell

    Home Metashell Motivation License Getting Metashell Supported platforms Supported compilers Binary installers Building Metashell User manual Getting started The environment in Metashell Using different compilers Troubleshooting Embedding Metashell How to... Reference The pragmas MDB commands PDB commands The built-in headers Engines Developer guide Building Metashell Creating a Metashell release T

  • https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md

    https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
    nharuki
    nharuki 2015/10/08
    ビャーネ先生達による「優れたモダンなC++を書くためのガイドライン集」