私は最近いくつかのコードを変更していて、関数内の1行に既存のバグを見つけました:
std:;string x = y;
このコードは引き続きコンパイルされ、期待どおりに動作しています。
このファイルはusing namespace std;であるため、文字列定義は機能しますstd::。そもそもこれは不要でした。
問題は、なぜstd:;コンパイルしているのか、そしてもしあれば、何をしているのか、です。
私は最近いくつかのコードを変更していて、関数内の1行に既存のバグを見つけました:
std:;string x = y;
このコードは引き続きコンパイルされ、期待どおりに動作しています。
このファイルはusing namespace std;であるため、文字列定義は機能しますstd::。そもそもこれは不要でした。
問題は、なぜstd:;コンパイルしているのか、そしてもしあれば、何をしているのか、です。
http://www.stackoverflow.comコンパイルと同じ理由...
using namespace std;:)
回答:
std:そのラベルgoto。のターゲットとして使用できます。
コメントで@Adam Rosenfieldが指摘したように、これは正当なラベル名です。
C ++ 03§6.1/ 1:
ラベルには独自の名前空間があり、他の識別子と干渉しません。
(expression)std: (end of expression); (another expression)string x = y;
(label-)statement、実際にはであり、ではありませんexpression。
コンパイラーは何が起こっているのかを教えてくれます:
#include <iostream>
using namespace std;
int main() {
std:;cout << "Hello!" << std::endl;
}
gccとclangはどちらもかなり明確な警告を出します:
std.cpp:4:3: warning: unused label 'std' [-Wunused-label]
std:;cout << "Hello!" << std::endl;
^~~~
1 warning generated.
この話の要点:常に警告を有効にしてコードをコンパイルしてください(例:)-Wall。
using namespace std;。