C++0x ユーザー定義リテラル

C++0x で提案されているユーザー定義のリテラルを使用すると以下のようなことができるようになる

"Hello"s      // std::string
101011100011b // binary literals
123km         // unit is kilometers


リテラルを定義するには、以下のような演算子を定義する

X operator""suffix(const char*);

X x = 1234suffix; // operator"suffix"("1234");

この場合、operator""suffixの引数は NULL 終端の文字列となる


Variadic Templates を併用すると、リテラルを char 型の コンパイル時定数とすることができる

template <char...>
X operator""suffix();

X x = 1234suffix; // operator""suffix<'1', '2', '3', '4'>();

constexpr を使用することで、リテラル計算の結果をコンパイル時定数とすることもできる



N2378 - User-defined Literals (aka. Extensible Literals (revision 3))

C++0x言語拡張まとめ