タグ

c++に関するskypenguinsのブックマーク (49)

  • VSCode で clangd を使って、賢いC++インテリセンス環境を整える - Qiita

    VSCode の標準のC++インテリセンスでは、簡単なコード補完などや、構文が間違ってるなどのエラー表示はリアルタイムに出来ますが、警告などはリアルタイム表示出来なかったり、その他コーディング時に行ってほしい賢い機能が不足しがちです。 例えば以下のコードは、セミコロン忘れなどのエラーは表示してくれますが、未初期化変数の f などはコンパイル時に警告がちょろっと出るだけで、見落としてしまいます。 #include <iostream> using namespace std; int main(){ int f; cout << f << endl; cout << "semicolon" << endl return 0 } MS 標準の C++ インテリセンスはそこまで賢くないからというのが理由なのですが、ここで変わりに clangd を使うことで、賢いリアルタイムインテリセンスを使える

    VSCode で clangd を使って、賢いC++インテリセンス環境を整える - Qiita
  • 「LLVM lld」「mold」が解決した、リンクが遅い問題 間違った思い込みの解消に必要だったのは“クレイジーな人”

    Blue Whale Systems株式会社の植山類氏は、「LLVM lld」「mold」が解決したプログラムのビルドの問題を例に、“大きな問題”を解決することについて話しました。全3回。 1個の質的な問題を解いてしまうほうが細かいことを考えるよりも簡単 植山類氏:では始めます。日、機会をいただいて講演をすることになった植山と申します。この講演の内容は「大きな問題のほうが小さな問題より解くのは簡単だ」というタイトルです。 どういう趣旨かというと、常に簡単だというわけではないのですが、いろいろな場面で、1個の質的な問題をドッカンと解いてしまうほうが、いろいろな細かいことを考えるよりも簡単なことが多いという話です。 そういうソリューションが往々にして見逃されがちということがけっこうあって、そういうことにどうやって挑戦していくのかという気持ちの話を、僕がそういう大きな問題を解決した経験を踏

    「LLVM lld」「mold」が解決した、リンクが遅い問題 間違った思い込みの解消に必要だったのは“クレイジーな人”
  • 「//このコメントを消したら動かない」は大体Shift_JISの2バイト目が原因で発生する - Qiita

    TL;DR Shift_JISにしただけでコンパイラが通らなくなる恐ろしい事件とその回避法について。 \ (¥)のASCIIコードは0x5c 表、能は良くない UTF-8は神 2023/12/06追記 誤りがあったので訂正します。こんな読まれると思ってなかったので正直ちょっとびっくりしていますが、いろいろコメントありがとうございました。(ツイート等全て拝見しました。) Shift_JISが悪いわけではない(デフォルトのエンコーディング設定の問題)→追記しました UTF-8にはUTF-FSSという仕様でこの問題が回避されている→マジでタメになる知識ありがとうございます OSによってデフォルトのエンコーディング設定が異なるせいで、デフォルト環境での動作がOSにより異なる→なるほど?(調査中) CRLFとLF問題では→なるほど?(調査中) そんな問題何を今更→UTF-8が出てから生まれたからです

    「//このコメントを消したら動かない」は大体Shift_JISの2バイト目が原因で発生する - Qiita
  • Llama.cpp で Llama 2 を試す|npaka

    「Llama.cpp」で「Llama 2」を試したので、まとめました。 ・macOS 13.4.1 ・Windows 11 前回 1. Llama.cpp「Llama.cpp」はC言語で記述されたLLMのランタイムです。「Llama.cpp」の主な目標は、MacBookで4bit量子化を使用してLLAMAモデルを実行することです。 特徴は、次のとおりです。 ・依存関係のないプレーンなC/C++実装 ・Appleシリコンファースト (ARM NEON、Accelerate、Metalを介して最適化) ・x86アーキテクチャのAVX、AVX2、AVX512のサポート ・Mixed F16/F32精度 ・4bit、5bit、8bit量子化サポート ・BLASでOpenBLAS/Apple BLAS/ARM Performance Lib/ATLAS/BLIS/Intel MKL/NVHPC/AC

    Llama.cpp で Llama 2 を試す|npaka
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • C++ ムーブ�セマンティクスと右辺値の概念を初心者向けに - Qiita

    備忘録です。 ムーブ、ムーブセマンティクスの概念、ムーブコンストラクタの話を図を交えて解説します。 記事は、「ムーブという概念は聞いたことがあるんだけど実際どういうものかわからない」という人が対象(のつもり)です。 左辺値と右辺値 ムーブ、ムーブセマンティクスの話をする前に非常に重要な左辺値と右辺値の話をします。 C++では左辺値と右辺値が明確に区別されます。

    C++ ムーブ�セマンティクスと右辺値の概念を初心者向けに - Qiita
  • Escaping strings faster with AVX-512 – Daniel Lemire's blog

    skypenguins
    skypenguins 2022/09/19
    AVX-512で高速に文字列をエスケープする
  • GitHubでC++プロジェクトを開発する際にやっておきたい設定 - Qiita

    この記事について 簡単な電卓アプリ開発を例に、以下を行います GitHub上でのIssueテンプレート、マイルストーン、Projects(カンバンボード)の設定 GitHub Flowを例にした簡単な開発の流れの説明 CMakeを用いた、C++プロジェクトの用意 GoogleTestを用いたUnit Testの導入 GitHub Actionsを用いた、CI/CDの導入 クロスプラットフォーム (Windows, Linux, MacOS, Linux(ARM)) GitHub Actionsを用いた、コードの静的解析 この記事では、開発の方法論はおまけとして、それを支えるためのツールの設定方法に重点を置きます 1人でやる個人開発~数名規模での開発は記事の内容でカバーできると思います。もっと複雑になると別の仕組みが必要になってきそうです 記事の設定を全てやる必要はなく、必要そうな項目を

    GitHubでC++プロジェクトを開発する際にやっておきたい設定 - Qiita
  • 旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita

    現代のプログラミング言語ではポインタは単なるアドレスではなく,provenanceを伴った参照として扱われています. 世界は既に変わっています. 概要 ポインタは単なるアドレスではありません. ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています. Provenanceを使うことで,最適化が効きやすくなったり,堅牢なプログラムを書きやすくなったりします. 追記: 次の英語記事を読むとprovenanceが必要な理由についてもっとよく知ることができます.クリックしよう!!!!(2020-12-15) https://www.ralfj.de/blog/2020/12/14/provenance.html ポインタはアドレスではない 次のCプログラムを見てみましょう. #include <stdio.h> #include <string.h> int main

    旧石器時代のポインタをご利用の皆様へ ~provenance入門~ - Qiita
  • cpprefjp - C++日本語リファレンス

    サイトcpprefjpは、プログラミング言語C++のリファレンスを提供するWebサイトです。 最新C++バージョンのリファレンスを提供していきます。 運営方針 リファレンスサイトは、C++言語の最新のリファレンスを常に提供し続けることを目標にしています。 各クラス、関数にはそれぞれ1つ以上のサンプルコードを付けていく方針です。 サイトでは、他サイトおよび規格書の直接的な翻訳ではなく、編集者の調査と考えに基づいた解説を提供していきます。 スポンサーシップ cpprefjp - Open Collective このプロジェクトは、持続的な活動のため、ユーザーの方々からのご支援をお待ちしております。上記Open Collectiveのプロジェクトでスポンサーシップの募集をしております。 ご支援いただくユーザーの方々には、以下の特典があります。 ページ (cpprefjpサイトのトップペー

  • 江添亮のC++入門

    書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶためのである。書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。書はいわばC++における知識のブートストラップを目指しただ。これにより読者はを先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し

    skypenguins
    skypenguins 2019/09/20
    江添さん人格はアレだけど本業は流石としか言いようがない
  • cpp-aligned-allocate

    C/C++でコーティングしていると、特定のサイズにアライメントされた領域が必要なることがありますよね。ハードウェアに近いところを実装してると「4KiBでアラインせよ」とか普通にありますね。 このようなアライメントされた領域を確保する方法はいくつかありますが、今回は可搬性の高い方法をいくつか紹介します。 posix_memalign 関数 これは名前の通り、POSIX準拠の関数ですので Unix や Linux などほとんどの環境で動作します。プロトタイプ宣言は int posix_memalign(void **memptr, size_t alignment, size_t size); です。 この関数は、引数 size(Byte)の大きさの領域を確保し、引数 memptr の指す先へ領域へのポインタを格納します。その領域は引数 alignment で指定した値でアライメントされていま

    cpp-aligned-allocate
  • C++演算子オーバーロード大全 - Qiita

    はじめに この記事ではC++の演算子のオーバーロードを使い慣れていない人の為のまとめとして作成しました。 C++の演算子のオーバーロード、引数や戻り値に自由が利きすぎてどうするのがセオリーなのか分からないぞ、というようなときに見て頂けたらと思います。 主に引数や戻り値を中心に据えますが、細かい機能も網羅していきたいと考えています。 私は二項演算子はグローバル関数教の信徒であり、const教の敬虔な信徒です。 優先順位の順に、演算子別に解説します。 なお、thisの型を T* const型とし、Tとは別の任意の型をUとしています。 では、早速解説していきたいと思います。 Member Selection メンバ選択演算子。ドット演算子はオーバーロードできないので、載せるのはアロー演算子だけになります。この演算子はメンバ関数でなければなりません。また、演算子の文脈で使うにはアロー演算子を持った

    C++演算子オーバーロード大全 - Qiita
  • クラスまたは構造体の選択 - Framework Design Guidelines

    Note このコンテンツは、Pearson Education, Inc. の許可を得て、『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition (フレームワーク設計ガイドライン: 再利用可能な .NET ライブラリの規約、表現形式、およびパターン、第 2 版)』から転載されています。 この版は 2008 年に出版され、その後、このは第 3 版で全面的に改訂されました。 このページの情報の一部は以前のものである可能性があります。 すべてのフレームワーク デザイナーが直面する基的な設計上の判断の 1 つは、型をクラスとして設計するか (参照型)、構造体として設計するか (値型) ということです。 この選択を行うには、参照型と値型の動作の

    クラスまたは構造体の選択 - Framework Design Guidelines
  • 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の日記
  • 静的ポリモーフィズムの安全で簡単な実装 -動的から静的にしてパフォーマンス向上- - Qiita

    #include<iostream> class Base{ public: virtual void print(){ std::cout << "Base" << std::endl; } virtual ~Base()=default; }; class Super : public Base{ public: void print() override{ std::cout << "Super" << std::endl; } }; int main(){ Base* array[2] = {new Base,new Super} ; array[0]->print(); array[1]->print(); delete array[0]; delete array[1]; return 0; } このプログラムを実行すると Base Super と出力されます。 Baseポイン

    静的ポリモーフィズムの安全で簡単な実装 -動的から静的にしてパフォーマンス向上- - Qiita
  • 国際標準規格の紹介 〜ISO国際標準規格プログラミング言語C++について〜

    はじめに こんにちは、C++標準会員の江添です。 今日は普段から表に出ている、閉鎖的なゲーム開発では使われていない開発環境についての紹介をします。 今回紹介するのは、ISO国際標準規格プログラミング言語の「C++」です。 なんと表の世界では、国際標準のプログラミング言語は、コンパイラーベンダーやC++利用企業と行ったC++に利害関係を持つ多数の代表が国際標準規格を制定しているのです。当たり前でしょ? C++は以下のような特徴を持っています。 エラーに気づきやすい静的型付け言語 C++経験者が理解しやすい言語仕様 OSに依存しない移植性の高いC++実装 実行環境に依存しないC++規格準拠の挙動の定義 C/C++の関数・クラスに最初からバインドされている 今でもクローズな実装の詳細のわからないプログラミング言語がたくさんあり、それらを使うデメリットは数多くあります。 国際規格の言語を使うのは様

  • ハローワールド徹底解説 - Qiita

    この記事は 初心者C++er Advent Calendar 2016 6日目の記事です。 "Hello, World!" とは この記事は初心者向けの記事ではありますが、"Hello, World!" くらいは目にしたことのある方がほとんどだろう、と思います。 とはいえ聞いたことのない方の為に一応説明すると、この文字列はプログラミング言語の入門時に例として使われる文字列です。 どういう風に使うかというと、コマンドラインツールを作る場合はあの黒い画面に"Hello, World!"と出力したり、 "Hello, World!"とだけ書かれたウィンドウを作ってみたり、 "Hello, World!"と表示するダイアログを出してみたり、 ぶっちゃけ文字列の内容に意味はありません。 他にどんな物があるかを知りたければ、Wikipediaのこの記事とか見るといいかもしれません。 (2018年4月追

    ハローワールド徹底解説 - Qiita