タグ

C++に関するiwwのブックマーク (338)

  • Standard C++

    ISO C++ committee meeting June 24-29, St. Louis, MO, USA C++ on Sea July 2-5, Folkestone, Kent, UK Memory Management How do I deal with memory leaks? By writing code that doesn’t have any. Clearly, if your code has new operations, delete operations, and pointer arithmetic all over the place, you are going to mess up somewhere and get leaks, stray pointers, etc. This is true independently of how co

    iww
    iww 2024/03/18
    delete this; ちゃんと書けば大丈夫 という話
  • delete this の安全性 -

    メンバー向けトレーニングネタその1。delete this は危険に見えるが何を削除しているのか確認する。 class ClassA { public: void del() { delete this; } }; int main() { ClassA* ptr = new ClassA(); ptr->del(); // ダメな例 // ClassA test; // test.del(); return 0; } (gdb) b ClassA::del Breakpoint 1 at 0x4006aa: file test.cc, line 6. (gdb) run Breakpoint 1, ClassA::del (this=0x602010) at test.cc:6 6 delete this; ようするに、削除されるのはオブジェクトの管理領域 (0x602010) であって

    delete this の安全性 -
    iww
    iww 2024/03/18
    delete this; ちゃんと書けば大丈夫 という話
  • basic_stacktrace - cpprefjp C++日本語リファレンス

    namespace std { template <class Allocator> class basic_stacktrace; using stacktrace = basic_stacktrace<allocator<stacktrace_entry>>; } 概要 basic_stacktraceは、現在位置からその関数がどこで呼び出されたかの履歴を取得するためのクラスである。この機能は、デバッグに役立つ。 プラットフォームごとのデフォルトのアサーション機能は、その失敗時にバグの全体像を説明できないため、問題を特定するために十分な情報を提供しない。このクラスを使用することで、ユーザーはデバッグのために必要十分な情報を任意に取得できる。 このクラスは、アロケータ対応コンテナ、シーケンスコンテナ、逆順コンテナの要件を満たす。ただし、 const修飾されたコンテナに対して定義されたムー

  • 実行時の関数全ての in/out をトレースする - Qiita

    こういう DebugPrint 1関数ずつ入れなくてOK。 素敵ポイント: 大元のソースには手を入れない。 gcc 使用。 ソース #include<stdio.h> /* Proto Type */ void hello_world( void ); void hello_world(void) { printf( "hello!\n" ); } int main(void) { hello_world(); return 0; } #define _GNU_SOURCE #include <dlfcn.h> #include <iostream> extern "C" { void __cyg_profile_func_enter(void* func_address, void* call_site); void __cyg_profile_func_exit(void* func_

    実行時の関数全ての in/out をトレースする - Qiita
  • C/C++プログラム実行時の関数をトレースする方法

    C/C++プログラム実行時の関数をトレースする方法を紹介します。 1.はじめに C/C++プログラムで実行時の関数をトレースする場合、printf()などを埋め込んでログに出力することが少なくないと思います。 が、その方法ではログ出力するためにプログラムに手を入れなくてはならなず、非効率です。 また規模の大きなプログラムでは現実的な解決方法ではありません。 printf()を埋め込まずにトレースできないか、方法を探していたところ、標準でそのような機能があることをみつけました。 仕組みは、gccでトレースしたいプログラムファイルのコンパイル時に、コンパイルオプション"-finstrument-functions"を付与することで、関数の実行開始時および復帰時に下記のフック関数を呼び出せるようになります。 void __cyg_profile_func_enter(void* func, vo

    C/C++プログラム実行時の関数をトレースする方法
  • g++: internal compiler error: Killed (program cc1plus) が出た時

    libtool: compile:  g++ -DPACKAGE_NAME=\"nysol_mcmd\" -DPACKAGE_TARNAME=\"nysol_mcmd\" -DPACKAGE_VERSION=\"3.0\" "-DPACKAGE_STRING=\"nysol_mcmd 3.0\"" -DPACKAGE_BUGREPORT=\"info@nysol.jp\" -DPACKAGE_URL=\"\" -DPACKAGE=\"nysol_mcmd\" -DVERSION=\"3.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1

    g++: internal compiler error: Killed (program cc1plus) が出た時
  • 実践C++入門講座 第28回目 staticメンバ、および、クラス外でメンバを定義する | Theolizer®

    こんにちは。田原です。 前回まででクラスの基の重要部分の解説が終わりましたが、あともう少し説明しておくべきことが残ってます。今回はその残りのstaticメンバとクラス宣言の外でメンバを定義する方法などについて解説します。 1.クラスとオブジェクトとインスタンス 今まで、クラス型の変数などと呼んでましたが、クラス型の変数やnewで獲得したクラス実体のことを、インスタンスやオブジェクトと呼ぶことが多いようです。 クラスも含めてオブジェクトと呼ばれることもあります。例えば「オブジェクト指向プログラミング」ですね。 class Foo { int mData; public: Foo() : mData(123) { } }; int main() { Foo mFoo; Foo* pFoo=new Foo(); delete pFoo; } というプログラムがあるとき、mFooはFooクラスの

    実践C++入門講座 第28回目 staticメンバ、および、クラス外でメンバを定義する | Theolizer®
    iww
    iww 2023/12/06
    静的メンバ変数は明示的な初期化が必要
  • 【C++】staticメンバ変数が"undefined reference"エラーになったときの対処法 : としおの読書生活

    としおの読書生活 田舎に住む社会人の読書記録を綴ります。 主に小説や新書の内容紹介と感想を書きます。 読書の他にもワイン、紅茶、パソコン関係などの趣味を詰め込んだブログにしたいです。 静的メンバ変数を宣言した時に、コンパイルエラーが起きて 「undefined reference to `Hogehoge::m_hogeNum'」 といった感じに、宣言してたはずのメンバー変数が宣言していないとのエラーが発生しました。 記事では、このエラーに対する対処方法をまとめていきます。

    【C++】staticメンバ変数が"undefined reference"エラーになったときの対処法 : としおの読書生活
    iww
    iww 2023/12/06
    静的メンバ変数は明示的な初期化が必要
  • 【2023年最新版】【C++】staticメンバ変数がundefined referenceとエラーになる場合

    クラスが生成される度にインクリメントしてクラス番号を付与する目的で、staticなメンバ変数を以下のように宣言して使うとする。 #include <iostream> class Test { public: static int sSequence; int mClassNo; Test(void); ~Test(void); }; Test::Test(void) { mClassNo = sSequence++; //自分のクラス番号をスタティックシーケンスから付与し、シーケンスを加算する } Test::~Test(void) { } int main(void) { Test t1 = Test(); Test t2 = Test(); std::cout << "t1 no=" << t1.mClassNo << ",t2 no=" << t2.mClassNo << ",se

    iww
    iww 2023/12/06
    静的メンバ変数は明示的な初期化が必要
  • Undefined reference to a static member

    iww
    iww 2023/12/06
    静的メンバ変数は明示的な初期化が必要
  • 216624 – net/delegate: fails to build with clang 4.0

    iww
    iww 2023/10/17
    ordered comparison of pointer with integer zero。 IStrマクロはただのcharの配列定義なので、ここはコンパイルが通りさえすれば良い
  • C++03とC++11の違い: 宣言子編

    京都C++勉強会の宣伝のために、C++03とC++11の違いを、少しづつ解説することにした。 今回は、宣言子だ。 C++11にはリスト初期化のNarrowing Conversionが禁止された。 以下のような合法なC++03コードが、C++11では違法となる。 // C++03では合法 // C++11では違法 int a[] = { 1.0 } ; C++11では、リスト初期化というものを新たに導入し、従来aggregateにのみ許されていた{ }による初期化を、ユーザー定義型のクラスにももたらした。この心機能の追加にあたって、リスト初期化では、浮動小数点数から整数型や、より表現できる範囲が狭い可能性のある型への暗黙の変換(例:doubleからfloat、intからshort)を、縮小変換(narrowing conversion)と名付け、明確に禁止した。 もし、どうしても型変換を行

    iww
    iww 2023/10/17
    『いつか、暗黙の型変換が一切廃止される日をこの目で見たい。』 まだ来ない
  • NimとC++を比較してみる - Flat Leon Works

    この記事は「Nim Advent Calendar 2017」の記事として登録させてもらっています。 NimNimソースコードをC言語ソースへ変換するトランスコンパイラ言語です。これは普段C++を使っている人にとって非常に重要なことです。なぜなら、C++(C言語)が使える環境なら基的にはどこでもNimを使うことができるからです*1。もちろん、普段C++を使っている環境でNimを使うにはメモリ管理やC++側との連携についてなど考慮すべきことはいろいろあると思いますが、やはりC言語のソースコードが生成されるというのは大きなメリットです。普段C++やC言語を使っている人が現実的な選択肢としてNimの利用を考えることができるわけですから。というわけで、この記事ではC++Nimの書き方の違い、機能の違いなどを紹介したいと思います。 Nimの言語機能についての詳細は公式の Nim Manual

    NimとC++を比較してみる - Flat Leon Works
  • RustとC++のジェネリクスの性格の差 - in neuro

    今までRustは使いまわすことのない適当なスクリプト的にしか使ってこなかったので、実際のところ質的に難しいことは何もしてこなかった。その間は非常に楽で、言われるほど難しくないのではと思っていた。が、最近コードを使いまわそうと思って書き始めたところ、即死してしまった。 例えば、ジェネリックな構造体を作ろう。名前と座標を持つ質点ということにしよう。すると、名前は文字列でいいとして、座標にはf64やf32のどちらも使い得るし、そもそも座標の値は特定の型に結びついたものではない。なのでジェネリクスを使うのが妥当だ。なので以下のようなコードを書き始める。 #[derive(Debug)] pub struct Particle<T> { pub name : std::string::String, pub pos : nalgebra::Vector3<T>, } fn main() { let

    RustとC++のジェネリクスの性格の差 - in neuro
  • CStringのFormat()が浮動小数点の桁指定で四捨五入する問題 – Developer Blog

    こんにちは。こんばんは。おはようございます。 Q-39です。お世話になっております。 最近Visual studioでC++を始めました。 MSのCStringのFormat()は浮動小数点の小数の桁指定をすると 四捨五入になります。 ネットで調べてみたら、浮動小数点の難しい問題と混同している サイトが見受けられました。 この手の問題は、数字で考えずに、文字で考えれば楽勝です。 小数点以下第4位まである場合に 小数点以下第3位を切り捨てるなら、 double a; CString s; だとして、 s.Format(“%.4f”, a) s = s.Left(s.GetLength() – 2); で終わり。 0.005を引いてみるとか、そういうのは桁によって浮動小数点の難しい問題にぶち当たります。

    iww
    iww 2023/05/16
    四捨五入、切り捨て。 文字列として対処する考え方
  • 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
  • 米国家安全保障局、CやC++からメモリー安全性の高いJavaなどへの移行を推奨

    印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます 米国家安全保障局(NSA)は米国時間11月10日、ソフトウェアのメモリー安全性強化に向けたガイダンスを公開した。同機関はその中で開発者らに対して、ハッカーらによるリモートコード実行(RCE)をはじめとするさまざまな攻撃からコードを保護するために、C#やGoJavaRubySwiftRustといったメモリー安全性の高い言語に移行するよう推奨している。 これらの言語の中では、Javaが企業向けアプリや「Android」アプリの開発で最も幅広く使用されている一方、Swiftは「iOS」アプリの開発環境に取り込まれている点もあって人気プログラミング言語の上位に入っている。また、RustはシステムプログラミングにおいてCやC++の代替とし

    米国家安全保障局、CやC++からメモリー安全性の高いJavaなどへの移行を推奨
    iww
    iww 2022/11/14
    つまりCやC++がチョットデキルRustプログラマーがこれからどんどん稼げる時代になるのかな
  • オブジェクト指向は継承で多態するプログラミング - きしだのHatena

    オブジェクト指向って継承による多態があるからこそなんだけど、継承が非推奨になって以降に雰囲気でオブジェクト指向を知った人には、継承はオプションでカプセル化だけでオブジェクト指向って言ってしまいがちに思います。 実際はカプセル化はオブジェクト指向固有じゃなくて、クラスでカプセル化を実現してるだけです。 さまざまな人のオブジェクト指向の定義 来ならどのように継承こそがオブジェクト指向なのかという説明をするんですが、かなり長くなりそうなので、とりあえずはいろいろな人たちのオブジェクト指向の定義を抜き出してみます。 「ここに挙がってるのはオブジェクト指向の一派にすぎない」というような意見もありますが他の派閥についてまとまって定義され共通認識になっているようなものは見当たらないので、プログラミングの指針には なりづらいと思います。 ストラウストラップ C++を産んだストラウストラップは「C++の設

    オブジェクト指向は継承で多態するプログラミング - きしだのHatena
    iww
    iww 2022/08/26
    オブジェクト指向は多態こそが華で継承はその手段。 みたいに勝手に思い込んで仕事してます
  • How to delete an element from a vector while looping over it?

    iww
    iww 2022/06/09
    ぐるぐる回っている最中に削除したいやつ。 it = v.erase(it); で削除しつつ次のイテレータをもらう
  • Rustに移行する理由の大部分は、C++11以降の更新とガイドライン順守で消えますか?まあ、CargoこそC++にほしかったもののひとつでしょうけど。

    回答 (3件中の1件目) その通りですね。あとは言語の機能として標準でユニットテストがあるのもC++に対するメリットの一つです。 ちなみにCargoは以下の複数の機能を統合しています。 1. ライブラリ管理 2. ビルダー 3. タスクランナー このうち2,3はC++ではCMakeを利用すればほぼ同等のことができますが、如何せんCMake自体の仕様がまた大きすぎて初見では結構ハードルが高いですね。1はC++はいろいろ乱立していますが決定的なものは無いですね。私はもうgit submoduleで管理しています。ユニットテストについてはCatch2 [1]という素晴らしいフレームワークが...

    Rustに移行する理由の大部分は、C++11以降の更新とガイドライン順守で消えますか?まあ、CargoこそC++にほしかったもののひとつでしょうけど。