0

以下は許可されていません ('std::numeric_limits::max()' は定数式に表示できません):

#include <limits>   

struct MyStruct {

private:  
  static const unsigned int INVALID_VALUE = std::numeric_limits<unsigned int>::max();

public:
  unsigned int index;

  inline MyStruct() : index(INVALID_VALUE) {}
};

望ましい動作を得るための最良の方法はどれですか? 可能であれば、コンパイル時に INVALID_VALUE を認識できるようにしたいと考えています (たとえば、コンパイラがより適切に最適化できるようにするため)。

4

4 に答える 4

1

C++11 以降では、numeric_limits関数が宣言されているので問題ありませんconstexpr

過去に行き詰まっている場合は、クラス外で定数を定義して初期化する必要があります。

// Header file
struct MyStruct {
    static const unsigned int INVALID_VALUE;
    // ...
};

// One source file
const unsigned int Mystruct::INVALID_VALUE = std::numeric_limits<unsigned int>::max();

UINT_MAXまたは、で定義されているマクロを使用することもできます<climits>。これには、定数式で定数を使用できるという利点があります。

于 2013-08-16T12:01:05.810 に答える
0

追加:

const unsigned int mystruct::INVALID_VALUE = std::numeric_limits<unsigned int>::max();

cpp ファイルのどこかで、これが静的メンバーを初期化する通常の方法です。

于 2013-08-16T12:00:29.133 に答える