68

次のように、unsigned long 型の整数リテラルを指定できます。

const unsigned long example = 9UL;

unsigned char についても同様にするにはどうすればよいですか?

const unsigned char example = 9U?;

これは、コンパイラの警告を回避するために必要です。

unsigned char example2 = 0;
...
min(9U?, example2);

現在持っている冗長な回避策を回避し、別の行の変数で 9 を宣言せずに min を呼び出す行に「unsigned char」が表示されないようにしたいと考えています。

min(static_cast<unsigned char>(9), example2);
4

9 に答える 9

61

C++11 では、ユーザー定義リテラルが導入されました。次のように使用できます。

inline constexpr unsigned char operator "" _uchar( unsigned long long arg ) noexcept
{
    return static_cast< unsigned char >( arg );
}

unsigned char answer()
{
    return 42;
}

int main()
{
    std::cout << std::min( 42, answer() );        // Compile time error!
    std::cout << std::min( 42_uchar, answer() );  // OK
}
于 2016-04-25T08:57:00.933 に答える
30

Cは、幅がタイプの整数定数よりも小さい整数定数を指定する標準的な方法を提供していませんint

ただし、Cで取得するのとほぼ同じように、探しているものに近いことを実行stdint.hするためのマクロを提供します。UINT8_C()

しかし、ほとんどの人は、接尾辞なし(定数を取得するintため)またはU接尾辞(定数を取得するため)のいずれかを使用しますunsigned int。これらはcharサイズの値に対しては正常に機能し、stdint.hとにかくマクロから取得できるのはそれだけです。

于 2010-02-21T07:12:50.490 に答える
24

定数をキャストできます。例えば:

min(static_cast<unsigned char>(9), example2);

コンストラクター構文を使用することもできます。

typedef unsigned char uchar;
min(uchar(9), example2);

typedef は、すべてのコンパイラで必要なわけではありません。

于 2010-02-21T08:32:03.230 に答える
16

Visual C++ を使用していて、コンパイラ間の相互運用性を必要としない場合は、数値にui8サフィックスを使用して、符号なし 8 ビット定数にすることができます。

min(9ui8, example2);

ただし、「9」などの実際の文字定数ではこれを行うことはできません。

于 2011-12-02T10:09:59.260 に答える
10

実際にすべきことを使用していると仮定すると、そのように使用するタイプをstd::min明示的に指定することですmin

unsigned char example2 = 0;
min<unsigned char>(9, example2);
于 2010-02-21T07:43:05.763 に答える
3

単にconst unsigned char example = 0;うまくいくでしょう。

于 2010-02-21T04:16:12.233 に答える
0

unsigned char 型にはサフィックスはありません。整数定数はintor long( signedor unsigned) と C99long longです。値が unsigned char の有効な範囲内にある限り、プレーンな 'U' サフィックスを心配することなく使用できます。

于 2010-02-21T04:25:11.973 に答える