Рассмотрим следующий маленький кусочек кода:
// all of these include other headers, lots of code:
#include "myheader1.h"
#include "myheader2.h"
#include <string>
void foo() {
string s("hello world"); // oh no, why does this compile??
}
Это компилируется, поэтому очевидно, что некоторые из рекурсивно включенных заголовочных файлов имеют
using namespace std;
где-то. Как бы вы узнали, где находится эта оскорбительная строка кода?
Простое использование grep
для всех заголовочных файлов на самом деле не сработает, потому что этот оператор часто используется внутри функции, где она безопасна и не загрязняет остальную часть кода.