私は狂っているのですか、これはcygwin g ++コンパイラのバグですか?(uint8_t)0x00をstd :: stringに追加すると、cygwinであいまいなオーバーロードエラーが発生しますか?
これは動作します:
std::string record;
record += (uint8_t)1;
また、値0でのconst変数を追加すると、完全にクールです:
:const uint8_t tZero = 0x00;
std::string record;
record += tZero;
しかし、このコードを実行すると、あいまいな演算子オーバーロードエラーが発生
std::string record;
record += (uint8_t)0;
明示的なキャスト、特にsinc電子候補の一つがエラーに与えられているものと同じであるように思わ:このエラーはまた、Visual Studioで表示されない
sources/logger.cpp:55:20: error: ambiguous overload for `operator+=' (operand types are `std::string {aka std::basic_string<char>}' and `uint8_t {aka unsigned char}')
record += (const uint8_t)0;
note: candidates:
operator+=(const basic_string& __str)
operator+=(const _CharT* __s)
operator+=(_CharT __c)
、それは私が期待するのと同様0x00のバイトをコンパイルし、追加します。
参考のため、バイナリログデータのバッファとして文字列を使用しています。おそらく、より良いコンテナを使用することができますが、+バイトで入力できるのはあまり役に立ちません。
cygwinの文字列の実装にバグがありますか、それとも0なのでエラーが発生するはずですか?エラーを修正するためにconst変数を使用しても構いませんが、このプロセスは他の値を持つコードを通して複数回繰り返されるため、奇妙に見えます。
'char'にキャストしようとしていますか? – kennytm
_ "特に、候補の1つがエラーで示されているものと同一であるように見えるので、「_どちらですか? 'char'は' unsigned char'と同じではありません –
@kennytm私の変数の大きさを明示するのは私の好みです(私はたくさんの組み込み開発をしています)。答えによると、あなたは正しい、それは動作します。 @ジョナサン私は、符合が一致するパターンを選ぶ際に署名の重要性はないと思ったと思います。そうじゃないの? – DweebsUnited