これらのすべての行は、コンパイルして実行、出力に印刷された何も:コンパイラエラーなしでIntにStringを割り当てることができますか?
std::string ss{6};
ss=7;
std::cout << "ss " << ss << "\n";
が、私はそれを文字列に整数を強制することができますことをお勧めstd::string
のための任意の参照コンストラクタを見ていないので、なぜコンパイラではないがありません文句?
これらのすべての行は、コンパイルして実行、出力に印刷された何も:コンパイラエラーなしでIntにStringを割り当てることができますか?
std::string ss{6};
ss=7;
std::cout << "ss " << ss << "\n";
が、私はそれを文字列に整数を強制することができますことをお勧めstd::string
のための任意の参照コンストラクタを見ていないので、なぜコンパイラではないがありません文句?
「問題は」std::string
がchar
から割り当て可能であるとint
がchar
に暗黙的に変換されるということです。
(4)std::basic_string::operator=ポイントを見てみましょう:M.M's commentに述べたように
basic_string& operator=(CharT ch);
EDIT
、std::string ss{6};
initializer_list<char>
を取るコンストラクタを呼び出し(std::basic_string::basic_string
ポイント(9)
を参照してください)...と問題が再現されます。
うわー、なぜタイプ間の暗黙的な変換を許さないことによって、これらのエラーを取り除く言語がいくつかあるのは間違いありません。 –
@JXB:公正であるために、ここでのより大きな問題は、Cに文字型がないことです。代わりに文字の数値コードを整数型で格納します。 – Hurkyl
それはとてもint
が暗黙的にchar
に変換されている
basic_string& operator=(CharT ch);
です。
値65
を割り当ててみてください。印刷A
行ss=7
はコンストラクタを呼び出すのではなく、代入演算子=()
を呼び出します。
std::string
はchar
を取る代入演算子を持っていない、とあなたの値7は、その後string& operator= (char c);
がその値のために呼ばれ、char
に変換されます。文字列にはASCII BELL文字が含まれます。
詳細はhereを参照してください。
[代入演算子のドキュメント](http://en.cppreference.com/w/cpp/string/basic_string/operator%3D)が役立つことがあります。 – WhozCraig
これまでの回答は、 'initialize_list'を取ってコンストラクタを呼び出す 'std :: string ss {6};'については言及していませんでした。 –
'basic_string&operator =(CharT ch);' - 待って...何?どのような愚かな過負荷。 –