2009-08-31 9 views
2

これは:-)VS2008 C++コンパイラエラー?

string name; 
name = 1; 

をコンパイルこれはしていません:

string name = 1; 

任意の考え?

私はこれが間違っていることを知っています。 。 。それはポイントではありません。最初は笑顔を浮かべます。

答えて

14

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

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

4

2番目の例は、実際には割り当てではなく初期化です。 e。 operator=ではなくコンストラクタを呼び出します。明示的にクラスstringには、引数として整数をとるコンストラクタはありませんが、代入演算子はそれで問題ありません。そして、あなたがスマイリーな顔をする理由は、ASCII値1の文字であるということです。

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

1

質問には関係ありませんが、あなたと他の多くの人がコンパイル可能なコードを投稿してみませんか?ありますか:

#include <string> 
using namespace std; 

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

質問が多すぎますか?それを考えると、 "string"は実際にはstd :: stringを参照し、いくつかのランダムなクラスを参照していないことがわかります。

+0

インクルードが表示されていない場合は、標準とみなされます。ランダムなクラスの場合は、それを表示する必要があります。また、彼は正解をかなり早く得て、それによって行動を見せた。私はそれがどのように標準になったのかと思います。 –

+3

私はここのコードサンプルの多くは完全ではないことに同意しますが、何かのためにこの単純なものは必要ありませんでした。さらに、これは答えではなく、コメントであるべきです。 – krdluzni

+2

私にとっては、 'string'とは何かを推測するのではなく、自分でコンパイル可能なサンプルを作り、それを使って遊ぶ必要があるという事実です。私は準備が整った例を手渡されていることを大いに感謝し、もし私が持っているならば、私はその質問にもっと近づきそうです。 – sbi