タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

C++に関するs-shinのブックマーク (4)

  • テンプレートの実体化の実装方法とODR違反について

    問題 以下のC++コードを考える。 int plus( int a, int b ) { return a + b ; } double plus( double a, double b ) { return a + b ; } このC++コードは、int型とdouble型以外、コードはほぼ同じである。 しかし、ほとんどのコンピューターではint型とdouble型は操作方法が異なるため、この2つの関数は、全く別のコンピューターが処理できるコードに変換される。 ところで、古典的なC言語やC++コンパイラーの実装方法として、ソースコードのファイルをそれぞれ、一つ一つの翻訳単位としてコンパイルし、翻訳単位ごとにオブジェクトファイルを生成し、リンカーで複数のオブジェクトファイルを結合(リンク)して、単一のプログラムを生成するというものがある。 よくある実装では、オブジェクトファイルは、その翻訳単位

    s-shin
    s-shin 2017/08/07
  • Compiler Explorer

    Add new...Clone CompilerExecutor From ThisOpt RemarksStack UsagePreprocessorASTLLVM IROpt PipelineDeviceRust MIRRust HIRRust Macro ExpansionGHC CoreGHC STGGHC CmmGCC Tree/RTLGNAT Debug TreeGNAT Debug Expanded CodeControl Flow Graph

    Compiler Explorer
  • C++ でデストラクタを virtual にしなくてはならない条件と理由 | yunabe.jp

    Google C++ Style Guideにも書かれているように、クラスに仮想メンバー関数が存在する場合、そのクラスのデストラクタは virtual でなくてはなりません (If your class has virtual methods, its destructor should be virtual.)。 ただその理由は若干複雑です。理由が説明できないとコードレビューで問題を指摘する際に困りますし、逆に必要ないのに 「デストラクタには常に virtual をつけろ」と言われた場合に反論できなくて困ることになります。 ルールの前提 virtual なメソッドがあるなら、子クラスのポインタは必ず親クラスのポインタとして使用される そもそも virtual なメソッド (仮想メンバー関数)がクラスに定義されているということは、そのクラスは継承した子クラスを作成し、その子クラスのインスタ

    s-shin
    s-shin 2016/10/18
  • Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場

    たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ

    Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場
    s-shin
    s-shin 2016/10/07
  • 1