タグ

C++に関するmas-higaのブックマーク (73)

  • 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は全員戻り値型の後置記法を使おう - ペイントソフト開発日誌
    mas-higa
    mas-higa 2024/05/10
    "インデントが揃えやすい" これ言いだすと auto GetAge() /* ここにスペース入れたくなる */ const -> int;
  • 2024年の今、いかにしてVS2005を捨ててVS2015にする戦いは終わったか、そしてなぜCOMとの苦しい戦いが繰り広げられたか ~再入の悪魔~ - OPTiM TECH BLOG

    概要 Optimal BizのWindows AgentはながらくVisual Studio 2005とVisual Studio 2015を併用してビルドする必要がありました。Visual Studio 2015化対応は2012年のVisual Studio 2012化対応からスタートしていましたが、対応範囲の大きさからモジュールごとにVisual Studio 2015化対応を行ってきました。そして2024年リリースのBiz 9.19.0にてVisual Studio 2015化対応は完了を迎えました。 しかし、埋め込まれたバグの修正にはCOMの理解が不可欠であったため、2020年代に突入した今になって私達はこれまで正面戦争を避けてきたCOMを0から学び直す必要がありました。そしてATLの不思議な挙動やSTAにおける再入との戦いを乗り越え、無事にリリースされました。 はじめに Opti

    2024年の今、いかにしてVS2005を捨ててVS2015にする戦いは終わったか、そしてなぜCOMとの苦しい戦いが繰り広げられたか ~再入の悪魔~ - OPTiM TECH BLOG
  • [C++] 例外送出からキャッチまでのあいだ - 地面を見下ろす少年の足蹴にされる私

    C++のthrow式はどんな型のオブジェクトであっても投げることができます。この是非は置いておいて、あるthrow式に対して適切にcatch節(例外ハンドラ)が用意されている場合に、呼び出される例外ハンドラは厳密にどのように決まるのでしょうか?なんとなくthrow式の引数と同じような型ならマッチする気はしますが、そのルールは関数のオーバーロード解決時のものとは異なる気がします。 catch節での型マッチング 例外ハンドラで使えない型 例外オブジェクトの型 例外オブジェクトの状態 例外ハンドラ引数の初期化 コピー省略が起こるところ 例外オブジェクトの寿命 std::exception_ptr 例 余談 : 決して選択されない例外ハンドラ 参考文献 catch節での型マッチング 例外オブジェクトの型をEとすると、対応する例外ハンドラの決定はそのcatch節の宣言型(以下、ハンドラの型)とEをマ

    [C++] 例外送出からキャッチまでのあいだ - 地面を見下ろす少年の足蹴にされる私
  • 疑われる「C++」の安全性、今後の動きはどうなる

    C++」は非常に人気があるプログラミング言語だが、同言語の標準化に取り組んでいるグループが、C++の「メモリ安全性」を(新しいライバル言語である「Rust」のように)高めるための今後の道筋について議論する文書を発表した。 Rustは、MicrosoftAmazon Web Services(AWS)、Meta、GoogleAndroid Open Source Project、主にC++で書かれている「Chromiumプロジェクト(まだ始まったばかりだが)、Linuxカーネルなど、多くの企業やプロジェクトで採用されており、メモリ関連のセキュリティホールを減らすのに役立っている。最近では、米国家安全保障局(NSA)までが、開発者に対してC++からC#やJavaRubyRustSwiftへの戦略的な移行を促す事態になっている。 C++の生みの親であるBjarne Stroustr

    疑われる「C++」の安全性、今後の動きはどうなる
    mas-higa
    mas-higa 2023/01/31
    あー疑われちゃったかー
  • C++ コンパイル時「出力」 ~C++にできないことはない~ - Qiita

    これは、 C++ でコンパイル時に出力まで済ませようとした話です。 コンパイラは GCC に限ります。 はじめに もうすぐクリスマスですね! クリスマスにすることといえば……、 そう、コンパイル時処理ですね!! コンパイル時処理 C++ のコンパイル時処理は非常に強力で、様々なことがコンパイル時にできてしまいます。 普通はコンパイル時に決まる定数の計算に使われますが、これを悪用利用してコンパイル時に処理がすべて終わるようなものも書くことができます。 例として、コンパイル時 FizzBuzz を書いてみます。 #include <array> #include <string_view> #include <algorithm> #include <concepts> #include <iostream> template <std::unsigned_integral T> conste

    C++ コンパイル時「出力」 ~C++にできないことはない~ - Qiita
    mas-higa
    mas-higa 2022/12/20
    "こればっかりはどうしようもないです……本当にそうでしょうか?"
  • 最新C++(C++23)からみた最新C(C23) - Qiita

    参考資料 次期C標準 (C23) の内容が固まったらしい cppreference.com - C23 🙇 Q. これはC++の記事というよりも、Cの記事ではないですか? A. 「お前がそう思うんならそうなんだろう お前ん中ではな」 C99言語機能では_Boolキーワードとして導入され、ヘッダstdbool.hによりbool型とtrue/false定数が有効となっていた。C23以降は常にbool/true/falseとして利用可能となる。 ↩ C99言語機能では_Static_assertキーワードとして導入され、ヘッダassert.hによりstatic_assertが有効となっていた。C23以降は常にstatic_assertとして利用可能となる。またC23からC++17同様に第2引数を省略可能となる。 ↩ C99言語機能では_Thread_localキーワードとして導入され、ヘッダt

    最新C++(C++23)からみた最新C(C23) - Qiita
    mas-higa
    mas-higa 2022/12/09
    "引数リストを明示しない関数宣言の廃止" まだそんなことできたんか!?
  • 米国家安全保障局、CやC++からメモリ安全なプログラミング言語への移行を推奨する文書を公開

    同ガイダンスは、近年のサイバーセキュリティ脅威の多くに利用されている、ソフトウェアのメモリ安全性の悪用を防ぐことを目的としており、組織におけるソフトウェアの開発にあたっては、可能な限りメモリ安全なプログラミング言語を使用するとともに、コンパイラのオプション、ツールのオプション、OS構成といったコードの安全性を高める対策を施すことで、保護を強化することを推奨している。 メモリ安全でないプログラミング言語としては、一般的に使用されているCやC++を挙げており、これらのプログラミング言語はメモリ管理において高い自由度と柔軟性を提供する一方で、メモリ参照が安全に行われているかどうかのチェックはプログラマに大きく依存していると指摘する。 ソフトウェア解析ツールを使用すれば、ソースコード中のメモリ管理における問題の多くを検出できるほか、OSによっては不正なメモリの利用を防ぐオプションも用意されているも

    米国家安全保障局、CやC++からメモリ安全なプログラミング言語への移行を推奨する文書を公開
    mas-higa
    mas-higa 2022/11/16
    C++ ってそんな危険か? / 過去に変なコーディング規約のせいで危険だった現場はあったな。
  • C++が“使ってはいけないプログラミング言語”だと言われるのはなぜ?

    関連キーワード Google | アプリケーション開発 | プログラミング プログラミング言語「C++」は、プログラミング言語「C」から派生した。そのためC++は、Cの仕組みを受け継いでいる。C++エンジニア向けカンファレンス「CppNorth 2022」の基調講演において、「C++の成功にはCの継承が不可欠だった」と、Googleのプリンシパルソフトウェアエンジニアであるチャンドラー・カルース氏は語った。同社はC++の後継を目指して、プログラミング言語「Carbon」(Carbon Language)の開発を進めている。 CからC++への移行は比較的スムーズに進んだ。一方でC++が抱える“ある問題”が顕在化した。 C++が“使ってはいけない”と言われるのはなぜ? 併せて読みたいお薦め記事 連載:「Carbon」は「C++」の後継になり得るか 第1回:プログラミング言語「C++」が嫌われる

    C++が“使ってはいけないプログラミング言語”だと言われるのはなぜ?
    mas-higa
    mas-higa 2022/09/27
    どこで言われてんの?
  • C++の後継目指すプログラミング言語「Carbon Language」、Googleの技術者が実験的公開。C++は技術的負債で改良が困難と

    Google技術者Chandler Carruth氏らは、C++の後継を目指す実験的なプログラミング言語として「Carbon Language」(以下、Carbon)をGitHubで公開しました(Chandler Carruth氏のツイート)。 GitHubのドキュメントでは、C++が性能を重視するソフトウェア開発において主流のプログラミング言語である一方、言語そのものにおいて数十年にわたる技術的負債が蓄積されていることなどにより段階的に改良していくことが極めて困難になっていると指摘。 一方で、GoSwiftKotlinRustを始めとする優れた開発者体験を提供する多数のモダンな言語は、C++の代わりに採用する、あるいはC++の開発から移行するには、プログラミング言語の違いや性能のオーバーヘッドなど障壁が多すぎるといった課題があるとも指摘しています。 そこでC++の段階的な改善では

    C++の後継目指すプログラミング言語「Carbon Language」、Googleの技術者が実験的公開。C++は技術的負債で改良が困難と
    mas-higa
    mas-higa 2022/07/21
    "改良していくことが極めて困難" って C++ の言語処理系のことじゃないの? 誰得なのか分からん。C++ で実装したコードの技術的負債は C++ っぽい言語を作ったって返済できんでしょ。
  • C++ Cheat Sheets & Infographics

    Standard Algorithms

    C++ Cheat Sheets & Infographics
  • おっさんのためのModernC++入門ガイド(草稿) - dec9ue's diary

    みなさんはC++の読み書きができますか? 自信がある方、いつ頃勉強しましたか?もし20世紀に勉強したのであれば、その知識は相当古いです。実質現在のModernC++(C++11以降のC++)とは概念上の互換性がないので脳のアップデートが必要です。 自信がない方、文法は知っているけどなんとなく使いこなせていない方、マサカリ屋にあーだこーだ言われて大混乱している方。必勝パターンを身につければもっと楽にコードを読み書きできるようになるかもしれません。 この文章の目的は、ModernC++におけるメンタルモデル(考え方)や必勝パターンをざっくりと導入することでみなさんが楽にModernC++を読み書きできるようなお手伝いをすることです。主要な内容としてはムーブセマンティクスと右辺値 とその次の章でだいたいA4換算で15ページくらい?ほかは正直流し読みしてもらえるような内容です。また、内容的にはその

    おっさんのためのModernC++入門ガイド(草稿) - dec9ue's diary
  • Learn Contemporary C++ | Concise&Visual Examples

    Learn up-to-date, idiomatic C++ with code examples, concise explanations, cheat sheets and infographics. -- Lerne aktuelles, idiomatisches C++ mit Code-Beispielen, knappen Erklärungen und Infografiken. -- 学现代的C++ // 代码示例,简洁的说明和图表

    Learn Contemporary C++ | Concise&Visual Examples
  • オープン化が進むC++の現状と展望

    AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen

    オープン化が進むC++の現状と展望
    mas-higa
    mas-higa 2021/08/26
    昔から ISO にあるやん…と思ったら規格策定プロセスがオープンに…ってメーリングリストに参加できるようになっただけ!? / gcc ってオープンソースなんだっけ?? / 確かに C++ の案件は C++11 すら使えないことあるなぁ。
  • Windows と C++ - 最新の C++ で Printf を使用する

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 最新の C++ で Printf を使用する Kenny Kerr printf を近代化するにはどうすればよいでしょう。C++ には printf に代わる最新の機能が用意されていると思い込んでいる開発者には、この質問が奇妙に感じられるかもしれません。C++ 標準ライブラリが自慢できる点は、優れた標準テンプレート ライブラリ (STL) にあることは間違いありませんが、これにはストリームベースの入出力ライブラリも含まれています。このライブラリは、STL とは大きく異なり、効率性に関わる原理を備えていません。 Alexander Stepanov と Daniel Rose が共同で執筆した『From Mat

    Windows と C++ - 最新の C++ で Printf を使用する
    mas-higa
    mas-higa 2021/06/23
  • C++20コンセプト入門以前 - Qiita

    C++20 では全C++プログラマ待望[要出展]の「コンセプト(Concepts)」が正式導入されました。 この記事では“入門以前”と称して、C++コンセプトのメリットをざっくりと説明します。詳細な仕様説明は行わないことを予めご了承ください。 後日追記: 2020-12-15付けで国際標準規格 ISO/IEC 14882:2020 としてC++20が正式発行されました。 C++コンセプトって何? 例えば cppreference.com(日語版) 冒頭では下記のように説明されます。なるほど分からん。言語仕様の説明としては間違いありませんが、これだけでC++コンセプトを理解するのはさすがに難しいでしょう。 クラステンプレート、関数テンプレート、および非テンプレート関数 (一般的にはクラステンプレートのメンバ) は、制約と紐付けることができます。 制約はテンプレート引数に対する制限を指定しま

    C++20コンセプト入門以前 - Qiita
    mas-higa
    mas-higa 2020/12/15
    SFINAE 難しい。SFINAE 分かってない人でもコンセプトなら使える?
  • 本当にあった怖いNULL - Qiita

    はじめに C++では、NULLは #define NULL 0のように定義されており、来使うべきではないところ(ポインターに関係のないところ)でも使用できてしまいます。 C++11ではNULLの様々な問題点を解消するためにnullptrキーワードが導入されました。nullptrは整数型に暗黙変換できず、より安全です。今日ではNULLは使うべきではありません。 なぜNULLは良くないのか、過去に見た事例を振り返りながら復習してみましょう。 NULL文字とNULLの混同 NULL文字('\0')とNULLポインター(NULL)は異なる概念のものですが、名前が似ているためか、混同している事例がありました。偶然にも値が一致しているので正しく動作します。 間違いの例:

    本当にあった怖いNULL - Qiita
    mas-higa
    mas-higa 2020/12/14
    "純粋仮想関数を宣言する0" 出てくるかと思って期待してた
  • C++における型名の文字列取得法を思いつく限り書いてみる。 - Qiita

    注意 記事執筆時点でC++20と明示しているソースに関しては、標準ライブラリ言語機能共に各コンパイラベンダが実装途中であり、 それらを受けて来使うべきC++20の機能などを使っていない不完全なコードの可能性があります。 それ以外のソースはC++17で書いております。 また各テスト環境は gcc 10.2 clang 11.0.0 VS2019 16.8.2 です。 また、記事の方法を使うこと、参考とすることによる不利益は一切負うことができませんので、ご自身の判断、責任のもとお使いください。 また、面倒なのでenumは明記していない場合、扱っていません。後日気力があれば追記します。 はじめに 唐突ですが、C++で型名が文字列で欲しいと思った瞬間、ありますよね。 主にはデバッグ用途、あるいはプラグインのあるソフトウェアを書かれる方など、ちょっと動的なことをするときに欲しいなと思うことがある

    C++における型名の文字列取得法を思いつく限り書いてみる。 - Qiita
    mas-higa
    mas-higa 2020/12/08
    ワクワクする。あとでやる。/ やってみた。楽しい。
  • C++20便利機能の紹介:文字列チェック三銃士(2/3) starts_with, ends_with - Qiita

    C++20便利機能の紹介:文字列チェック三銃士(2/3) starts_with, ends_withC++ C++20標準ライブラリの文字列クラスでは「先頭/末尾一致を確認するメンバ関数」が追加されます。 starts_with:対象は指定する部分文字列から始まっている? ends_with:対象は指定する部分文字列で終わっている? えー、いまさらーとか言わないソコ starts_withとends_with 文字列クラスstd::stringと文字列ビュークラスstd::string_viewそれぞれに、starts_with, ends_withメンバ関数が追加されます。1 #include <string> #include <string_view> void download(std::string_view url) { if (url.starts_with("http:/

    C++20便利機能の紹介:文字列チェック三銃士(2/3) starts_with, ends_with - Qiita
    mas-higa
    mas-higa 2020/12/03
    三銃士といえば starts_with, ends_with あとひとりは?
  • 江添亮のC++入門

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

  • C++は本当にRustに速度で負けるのか 〜「RustがC++に速度で勝った話」のベンチマークを追試する〜 - Qiita

    追記: 記事は g++ について書かれており、clang については補足で述べる程度でしたが、clang側の検証結果が間違っておりました。 別途 clang++ で検証した記事も書きましたので、ご覧いただけますと幸いです。 記事の目的 昨日、株式会社フィックスターズの「Fixstars Tech Blog /proc/cpuinfo」に以下の記事が掲載されました。 RustC++に速度で勝った話 - Fixstars Tech Blog /proc/cpuinfo 記事では、上記記事の 手元環境における追試 C++の敗因/Rustの勝因分析 条件をある程度統一した際のベンチマーク結果 の3点を行います。 ベンチマーク環境 OS Fedora 30 CPU AMD A6-1450 Memory DDR3-1333 4GB x 1 (4GB) GCC 9.2.1 Rustc 1.39.

    C++は本当にRustに速度で負けるのか 〜「RustがC++に速度で勝った話」のベンチマークを追試する〜 - Qiita
    mas-higa
    mas-higa 2019/09/19
    最適化の違いらしい