ブックマーク / yohhoy.hatenadiary.jp (3)

  • windows.hのmin/maxマクロ回避策4パターン - yohhoyの日記

    Microsoft Windowsプラットフォームのヘッダファイル windows.h は悪名高いmin, maxマクロを定義するため、プリプロセス時に意図せずminやmaxが置換されてしまい、妙なコンパイルエラーを引き起こす場合がある。一例としてMSVC10で下記コードをコンパイルすると、それぞれエラーメッセージが出力される。 #include <windows.h> #include <numeric> //-------- Case 1 int a = 1, b = 2; int x = std::min(a, b); // error C2589: '(' : スコープ解決演算子 (::) の右側にあるトークンは使えません。 // error C2059: 構文エラー : '::' //-------- Case 2 double maxvalue = std::numeric_l

    windows.hのmin/maxマクロ回避策4パターン - yohhoyの日記
    fenrir-naru
    fenrir-naru 2020/04/07
    minmaxマクロの問題解決方法 #define NOMINMAX
  • 定義済みマクロ__cplusplusとgccの長い歴史 - yohhoyの日記

    C++言語の定義済みマクロ__cplusplusについてメモ。 C++ソースコードとしてコンパイルされるときのみ定義され、C/C++言語共用ライブラリヘッダ等でよく利用される。 // C/C++共用ヘッダファイル #ifdef __cplusplus extern "C" { #endif // ここでの宣言はC言語の場合はそのまま処理され、 // C++言語の場合は"C"リンケージ指定として処理される。 #ifdef __cplusplus } #endif C++言語仕様での定義 __cplusplusマクロの値は、準拠するC++規格バージョンによって異なる。C++98/03とC++11(N3337) 16.8/p1よりそれぞれ該当箇所を引用。(太字は強調) The following macro names shall be defined by the implementation

    定義済みマクロ__cplusplusとgccの長い歴史 - yohhoyの日記
    fenrir-naru
    fenrir-naru 2018/10/30
    C++11への対応は__cplusplusで見れる
  • ref-qualifierの使い道 - yohhoyの日記

    C++11で追加されたメンバ関数への参照修飾(ref-qualifier)の使い道についてメモ。 メンバ変数からのムーブ メンバ変数へのアクセサ関数を定義する場合、(1)非const参照を返す非constオーバーロード関数と、(2)const参照を返すconstオーバーロード関数を提供するのが一般的である。下記コードのように、関数f()が返す一時オブジェクト(=rvalue; 右辺値)のアクセサ関数を呼び出す場合も、非constオーバーロード関数(1)が選択されstd::stringはコピーされる。 なお、std::move関数などで明示的に右辺値へ変換すれば、std::stringをムーブすること自体は実現可能。 struct X { // (1)非const版はメンバ変数への非const参照を返す std::string& get() { return m_; } // (2)cons

    ref-qualifierの使い道 - yohhoyの日記
  • 1