2

C++11 を使用して次のスニペットをコンパイルします (デモはこちら):

#include <stdint.h>

int main() {
    const uint8_t foo[] = {
        '\xf2'
    };
}

'\xf2'への変換時に縮小変換があることを示す警告が表示されます (少なくとも GCC 4.7 では) uint8_t

どうしてこれなの?sizeof(char)は常に1であり、これは と同じsizeof(uint8_t)はずですよね?

などの他の char リテラルを使用する場合'\x02'、警告は表示されないことに注意してください。

4

2 に答える 2

3

\xf2私のシステムを見ると、signed char の範囲外であるため、定数がオーバーフローしています。-14これは、暗黙的に unsigned int に変換され、4294967282 の値を与えるとして表されcharます。

warning: narrowing conversion of ‘'\37777777762'’

を使用(unsigned char)'\xf2'すると、警告が削除されます。

于 2013-03-31T14:35:41.227 に答える