これはコンパイルされます:-)
string name;
name = 1;
これはしません:
string name = 1;
何かご意見は?
私はこれが間違っていることを知っています。. . それはポイントではありません。最初はにこやかな顔をします。
これはコンパイルされます:-)
string name;
name = 1;
これはしません:
string name = 1;
何かご意見は?
私はこれが間違っていることを知っています。. . それはポイントではありません。最初はにこやかな顔をします。
代入演算子は "string& operator= ( char c )" の 1 つのシグネチャを持ち、コンパイラは 1 を char に変換できるため、最初のコンパイルが行われます。
2 番目は、互換性のあるシグネチャを持たないコピー コンストラクターを呼び出すため、コンパイルされません。
2 番目の例は、実際には代入ではなく初期化です。つまり、コンストラクタではなくコンストラクタを呼び出しますoperator=
。明らかに、クラスstring
には整数を引数として取るコンストラクターがありませんが、代入演算子はそれで問題ありません。スマイリー フェイスが表示されるのは、ASCII 値が 1 の文字だからです。
ところで、これは Visual Studio に固有のものではありません。どの C++ コンパイラも同じように動作するはずです。
質問とは関係ありませんが、あなた(および他の多くの人)がコンパイル可能なコードを投稿しないのはなぜですか。だろう:
#include <string>
using namespace std;
int main() {
string name;
name = 1;
string name2 = 1;
}
求めすぎましたか?それを考えると、「文字列」は実際には std::string を参照しており、ランダムなクラスではないことがわかります。