私は次のコードがなぜコンパイルされるのか理解しようとしていますか?C++なぜこのコードはコンパイルされますか?
#include<iostream>
using namespace std;
int main()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
「cin >> cin」という文でコンパイラはどのように区別できますか?
私は次のコードがなぜコンパイルされるのか理解しようとしていますか?C++なぜこのコードはコンパイルされますか?
#include<iostream>
using namespace std;
int main()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
「cin >> cin」という文でコンパイラはどのように区別できますか?
プログラムを実行すると、入力を待たないことに気づくでしょう。
何も区別しません。int
を右シフトしています。
コンパイラの警告レベルを上げると、「警告:ステートメントは効果がありません」と表示されるはずです。
私は、コンパイラが変数 'int cin'と変数 'istream cin'をどのように区別しているのかを知りたいと思っています(つまり、コンパイラが 'cin >> cin ')。 –
ありがとう、今私は理解する。 –
molbdniloの答えへ追加するには:あなたが見上げる、あなたは現在のスコープ内のすべての変数のためのコンパイラを言っている、現在のスコープ内の識別子までループを声明using namespace std;
を使用して、もしされていない場合は
ルックアップがグローバルスコープに達し、依然として識別子を見つけることができなくなるまで、親スコープのにある場合、を使用しているの名前空間で検索しようとします。
あなたはint cin
宣言した後、メイン機能でcin
と呼ばれ、すべてがちょうどcin
をシフトし、ビットのcin
量によって"cin"
を左シフトしているあなたのコードのようにすべての、のstd :: cinをcin
ローカルint型ではないだろう。
[警告付きでコンパイル](http://melpon.org/wandbox/permlink/tgFspjAMCsbzNGCY)[何が起こっているのかを知るのに役立ちます(https://msdn.microsoft.com/en-us/library/) 336xbhcz.aspx)。 – chris
ローカル変数 'cin'はグローバル変数' cin'より「優先」です。 –