タグ

ブックマーク / cpp.aquariuscode.com (4)

  • Plain Old Data | 闇夜のC++

    C++におけるPOD(Plain Old Data)とは、C言語のデータと互換を持つデータ構造のことです。 memcpyでデータをコピーできたりするものですが、それは質的ではなく、とにかくPODの一番の意味はC言語のデータとbitレベルで完全に互換を持つということです。C++とC言語をまたぐプログラムがある場合、受け渡されるデータはPODでなければいけません。 会話中での出現例でいうと「あれ、ちゃんとPODで作っといてよ!」という具合に使います。 では、PODとは具体的にはどういうデータ構造でしょうか。 C互換データ=PODは、複雑なクラスレイアウトや、構築、コピー、ムーブなどのユーザ定義のセマンティクスを配慮することなく、”単なるデータ”として利用できるオブジェクトである。 __プログラミング言語C++第4版 8.2.6 POD POD型の定義 標準レイアウト型(standard la

  • ADL Firewall | 闇夜のC++

    先人たちが書いたコードからは学びが多いものです。 みんな大好きboostのnoncopyableのソースコードを読んでみましょう。 namespace boost { // Private copy constructor and copy assignment ensure classes derived from // class noncopyable cannot be copied. // Contributed by Dave Abrahams namespace noncopyable_ // protection from unintended ADL { class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: // emphasize the following members

  • Argument Dependent Lookup | 闇夜のC++

    C++言語の持つオシャレな機構の一つにADL(Argument Dependent Lookup)というものがあります。 和訳すると「実引数依存の名前検索」となり、読んで字の如く、「実引数」に依存した「名前検索」となります。なるほどわからん。 ADLの挙動 コードを見ながら順を追って理解してみましょう。

  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

  • 1