9

私は C++11 のいくつかの新機能を調査してきましたが、それらのいくつか、特にユーザー定義リテラルに非常に感銘を受けました。

これらにより、リテラルを生成するために何を行うかを制御する999_something形式のリテラルを定義できます。したがって、次を使用する必要はもうありません。something999

#define MEG * 1024 * 1024
int ten_meg = 10 M;

1_000_000_blahPerlの可読性に匹敵するように、アンダースコアを多数実装するのはいいことだと思っていました.

1101_1110_bや などのバイナリ値にも便利です0011_0011_1100_1111_b

明らかに_文字のため、これらは C 文字列を処理する raw モード タイプである必要がありますが、私はそれで問題ありません。

私が理解できないのは、オペランドのサイズに基づいて異なる型を提供する方法です。例えば:

1101_1110_b

(もちろん8ビットであるとchar仮定して)を与える必要があります:char

0011_0011_1100_1111_b

16 ビット タイプを提供します。

リテラル演算子関数自体からオペランドの長さを取得できますがoperator""(数字の文字を数えることによって)、戻り値の型は関数に固定されているように見えるため、これに基づいて別の型を返すことはできません。

これは、ユーザー定義型フレームワーク内の単一のサフィックスで実行できますか?それとも、_b手動で型を分割して (_b8など_b16)、ほとんど重複した機能を提供する必要がありますか?

4

2 に答える 2