今日、プログラムで、unsigned integer を std::string にうっかり割り当ててしまった興味深い状況に遭遇しました。VisualStudio C++ コンパイラは警告やエラーを表示しませんでしたが、プロジェクトを実行したときにたまたまバグに気付き、文字列にジャンク文字が表示されました。
コードは次のようになります。
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
次のコードも正常にコンパイルされます。
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
次の場合はエラーになります。
unsigned int my_number = 1234;
std::string my_string(my_number);
何が起こっている?コンパイラが最後のコード ブロックでビルドを停止するのに、最初の 2 つのコード ブロックはビルドするのはなぜですか?