2

これはコンパイルされます:-)

string name;
name = 1;

これはしません:

string name = 1;

何かご意見は?

私はこれが間違っていることを知っています。. . それはポイントではありません。最初はにこやかな顔をします。

4

3 に答える 3

14

代入演算子は "string& operator= ( char c )" の 1 つのシグネチャを持ち、コンパイラは 1 を char に変換できるため、最初のコンパイルが行われます。

2 番目は、互換性のあるシグネチャを持たないコピー コンストラクターを呼び出すため、コンパイルされません。

于 2009-08-31T20:15:06.997 に答える
4

2 番目の例は、実際には代入ではなく初期化です。つまり、コンストラクタではなくコンストラクタを呼び出しますoperator=。明らかに、クラスstringには整数を引数として取るコンストラクターがありませんが、代入演算子はそれで問題ありません。スマイリー フェイスが表示されるのは、ASCII 値が 1 の文字だからです。

ところで、これは Visual Studio に固有のものではありません。どの C++ コンパイラも同じように動作するはずです。

于 2009-08-31T20:15:18.323 に答える
1

質問とは関係ありませんが、あなた(および他の多くの人)がコンパイル可能なコードを投稿しないのはなぜですか。だろう:

#include <string>
using namespace std;

int main() {
    string name;
    name = 1;
    string name2 = 1;
}

求めすぎましたか?それを考えると、「文字列」は実際には std::string を参照しており、ランダムなクラスではないことがわかります。

于 2009-08-31T20:21:52.273 に答える